montecarlo
- corsort.montecarlo.evaluate(sort_list, n_list, nt, pool=None)[source]
Run a sim.
- Parameters:
Examples
>>> from corsort import SortQuick, WrapFullJit, entropy_bound, jit_corsort_borda >>> my_nt = 100 >>> np.random.seed(42) >>> my_sort_list = [SortQuick(), WrapFullJit(jit_corsort_borda)] >>> my_n_list = [10, 15]
Evaluate corsort and quicksort using a Pool:
>>> with Pool() as p: ... my_res = evaluate(my_sort_list, my_n_list, nt=my_nt, pool=p) Evaluate quicksort for n = 10 Evaluate corsort_borda for n = 10 Evaluate quicksort for n = 15 Evaluate corsort_borda for n = 15 >>> print_res(my_res) n=10, quicksort: mean=24.15, std=3.50 n=15, quicksort: mean=46.26, std=6.99 n=10, corsort_borda: mean=22.11, std=0.87 n=15, corsort_borda: mean=40.59, std=1.33
Same without the pool:
>>> np.random.seed(42) >>> my_res = evaluate(my_sort_list, my_n_list, nt=my_nt) Evaluate quicksort for n = 10 Evaluate corsort_borda for n = 10 Evaluate quicksort for n = 15 Evaluate corsort_borda for n = 15 >>> print_res(my_res) n=10, quicksort: mean=24.15, std=3.50 n=15, quicksort: mean=46.26, std=6.99 n=10, corsort_borda: mean=22.11, std=0.87 n=15, corsort_borda: mean=40.59, std=1.33
Bound (loose, not exact):
>>> print("\n".join(f"Bound for n={my_n}: {entropy_bound(my_n):.2f}" for my_n in my_n_list)) Bound for n=10: 21.78 Bound for n=15: 40.24
- corsort.montecarlo.evaluate_comparisons(sort_list, n_list, nt, pool=None)[source]
- Parameters:
sort_list
n_list
nt
pool
Examples
>>> from corsort import SortQuick, WrapFullJit, entropy_bound, jit_corsort_borda >>> my_nt = 100 >>> np.random.seed(42) >>> my_sort_list = [SortQuick(), WrapFullJit(jit_corsort_borda)] >>> my_n_list = [10, 15]
Evaluate corsort and quicksort using a Pool:
>>> with Pool() as p: ... my_res = evaluate_comparisons(my_sort_list, my_n_list, nt=my_nt, pool=p) Evaluate comparisons of quicksort for n = 10 Evaluate comparisons of corsort_borda for n = 10 Evaluate comparisons of quicksort for n = 15 Evaluate comparisons of corsort_borda for n = 15 >>> np.round(np.mean(my_res['quicksort'][10]), 1) 24.2
Same without the pool:
>>> np.random.seed(42) >>> my_res = evaluate_comparisons(my_sort_list, my_n_list, nt=my_nt) Evaluate comparisons of quicksort for n = 10 Evaluate comparisons of corsort_borda for n = 10 Evaluate comparisons of quicksort for n = 15 Evaluate comparisons of corsort_borda for n = 15 >>> np.round(np.mean(my_res['quicksort'][10]), 1) 24.2
- corsort.montecarlo.evaluate_convergence(sort_list, n, nt, pool=None)[source]
Performance profile.
- Parameters:
- Returns:
Key: name of the sorting algorithm. Value: a ndarray of nt rows. Each row gives the history of distance to the sorted list.
- Return type:
Examples
>>> from corsort import SortQuick, WrapFullJit, entropy_bound, jit_corsort_borda >>> my_nt = 100 >>> np.random.seed(42) >>> my_sort_list = [SortQuick(), WrapFullJit(jit_corsort_borda)] >>> my_n = 10
Evaluate corsort and quicksort using a Pool:
>>> with Pool() as p: ... my_res = evaluate_convergence(my_sort_list, my_n, nt=my_nt, pool=p) Evaluate convergence of quicksort for n = 10 Evaluate convergence of corsort_borda for n = 10 >>> np.round(np.mean(my_res['quicksort'], axis=0), 1) array([32.7, 32.4, 32. , 31.4, 30.4, 28.9, 27.1, 24.8, 21.7, 18.8, 18.3, 17.5, 16.8, 15.3, 13.9, 12.1, 10.2, 9. , 7.8, 6.5, 5.1, 3.9, 2.9, 2.1, 1.5, 1.1, 0.9, 0.6, 0.5, 0.3, 0.2, 0.1, 0.1, 0.1, 0. , 0. , 0. ])
Same without the pool:
>>> np.random.seed(42) >>> my_res = evaluate_convergence(my_sort_list, my_n, nt=my_nt) Evaluate convergence of quicksort for n = 10 Evaluate convergence of corsort_borda for n = 10 >>> np.round(np.mean(my_res['quicksort'], axis=0), 1) array([32.7, 32.4, 32. , 31.4, 30.4, 28.9, 27.1, 24.8, 21.7, 18.8, 18.3, 17.5, 16.8, 15.3, 13.9, 12.1, 10.2, 9. , 7.8, 6.5, 5.1, 3.9, 2.9, 2.1, 1.5, 1.1, 0.9, 0.6, 0.5, 0.3, 0.2, 0.1, 0.1, 0.1, 0. , 0. , 0. ])