Skip to content
Snippets Groups Projects
Commit c05172cb authored by Kinadinova Dariya's avatar Kinadinova Dariya
Browse files

analyse_tris

parent 646bd925
Branches
No related tags found
No related merge requests found
...@@ -2,101 +2,101 @@ taille;"tri séléction";"tri insertion" ...@@ -2,101 +2,101 @@ taille;"tri séléction";"tri insertion"
0; 0.00; 0.00 0; 0.00; 0.00
1; 0.00; 0.00 1; 0.00; 0.00
2; 1.00; 1.00 2; 1.00; 1.00
3; 3.00; 2.62 3; 3.00; 2.54
4; 6.00; 4.98 4; 6.00; 4.94
5; 10.00; 7.42 5; 10.00; 7.74
6; 15.00; 11.32 6; 15.00; 10.94
7; 21.00; 14.50 7; 21.00; 15.12
8; 28.00; 19.66 8; 28.00; 18.32
9; 36.00; 23.54 9; 36.00; 24.46
10; 45.00; 29.06 10; 45.00; 28.74
11; 55.00; 33.92 11; 55.00; 36.26
12; 66.00; 40.18 12; 66.00; 42.60
13; 78.00; 46.80 13; 78.00; 47.62
14; 91.00; 55.38 14; 91.00; 55.40
15; 105.00; 63.56 15; 105.00; 64.76
16; 120.00; 68.94 16; 120.00; 75.72
17; 136.00; 82.32 17; 136.00; 81.50
18; 153.00; 94.00 18; 153.00; 93.78
19; 171.00; 97.78 19; 171.00; 99.70
20; 190.00; 110.16 20; 190.00; 108.00
21; 210.00; 118.80 21; 210.00; 121.72
22; 231.00; 132.90 22; 231.00; 136.70
23; 253.00; 146.12 23; 253.00; 148.32
24; 276.00; 159.76 24; 276.00; 154.62
25; 300.00; 171.24 25; 300.00; 177.60
26; 325.00; 186.10 26; 325.00; 185.98
27; 351.00; 198.52 27; 351.00; 195.04
28; 378.00; 217.76 28; 378.00; 214.66
29; 406.00; 233.10 29; 406.00; 228.92
30; 435.00; 239.36 30; 435.00; 243.02
31; 465.00; 263.44 31; 465.00; 263.00
32; 496.00; 272.58 32; 496.00; 278.32
33; 528.00; 299.42 33; 528.00; 300.08
34; 561.00; 311.48 34; 561.00; 313.08
35; 595.00; 323.00 35; 595.00; 332.32
36; 630.00; 346.86 36; 630.00; 347.46
37; 666.00; 360.70 37; 666.00; 363.56
38; 703.00; 386.82 38; 703.00; 385.38
39; 741.00; 405.70 39; 741.00; 402.26
40; 780.00; 430.26 40; 780.00; 431.92
41; 820.00; 455.18 41; 820.00; 449.30
42; 861.00; 462.10 42; 861.00; 468.26
43; 903.00; 495.82 43; 903.00; 482.66
44; 946.00; 526.60 44; 946.00; 514.60
45; 990.00; 533.54 45; 990.00; 547.12
46; 1035.00; 567.98 46; 1035.00; 558.56
47; 1081.00; 587.28 47; 1081.00; 591.68
48; 1128.00; 618.48 48; 1128.00; 596.86
49; 1176.00; 633.90 49; 1176.00; 638.16
50; 1225.00; 659.22 50; 1225.00; 662.70
51; 1275.00; 657.48 51; 1275.00; 682.62
52; 1326.00; 711.12 52; 1326.00; 707.10
53; 1378.00; 722.72 53; 1378.00; 754.44
54; 1431.00; 761.36 54; 1431.00; 758.76
55; 1485.00; 809.52 55; 1485.00; 804.98
56; 1540.00; 816.98 56; 1540.00; 815.14
57; 1596.00; 852.90 57; 1596.00; 856.56
58; 1653.00; 877.80 58; 1653.00; 857.58
59; 1711.00; 933.96 59; 1711.00; 914.12
60; 1770.00; 938.76 60; 1770.00; 921.60
61; 1830.00; 970.32 61; 1830.00; 983.40
62; 1891.00; 993.92 62; 1891.00; 987.16
63; 1953.00; 1034.12 63; 1953.00; 1037.34
64; 2016.00; 1038.70 64; 2016.00; 1086.56
65; 2080.00; 1094.32 65; 2080.00; 1084.88
66; 2145.00; 1125.18 66; 2145.00; 1158.24
67; 2211.00; 1155.90 67; 2211.00; 1172.10
68; 2278.00; 1206.86 68; 2278.00; 1185.94
69; 2346.00; 1260.22 69; 2346.00; 1220.80
70; 2415.00; 1262.76 70; 2415.00; 1292.92
71; 2485.00; 1285.74 71; 2485.00; 1308.74
72; 2556.00; 1358.64 72; 2556.00; 1343.22
73; 2628.00; 1381.72 73; 2628.00; 1390.08
74; 2701.00; 1401.52 74; 2701.00; 1428.48
75; 2775.00; 1477.98 75; 2775.00; 1445.40
76; 2850.00; 1493.06 76; 2850.00; 1475.92
77; 2926.00; 1526.38 77; 2926.00; 1534.34
78; 3003.00; 1560.82 78; 3003.00; 1604.52
79; 3081.00; 1617.40 79; 3081.00; 1610.94
80; 3160.00; 1663.76 80; 3160.00; 1674.74
81; 3240.00; 1691.06 81; 3240.00; 1693.34
82; 3321.00; 1744.06 82; 3321.00; 1729.02
83; 3403.00; 1752.94 83; 3403.00; 1799.78
84; 3486.00; 1819.04 84; 3486.00; 1800.70
85; 3570.00; 1868.20 85; 3570.00; 1884.10
86; 3655.00; 1917.44 86; 3655.00; 1954.98
87; 3741.00; 1921.42 87; 3741.00; 1964.98
88; 3828.00; 2030.48 88; 3828.00; 2012.42
89; 3916.00; 2050.78 89; 3916.00; 2011.72
90; 4005.00; 2078.02 90; 4005.00; 2080.66
91; 4095.00; 2152.64 91; 4095.00; 2147.18
92; 4186.00; 2185.64 92; 4186.00; 2161.90
93; 4278.00; 2221.32 93; 4278.00; 2216.44
94; 4371.00; 2304.18 94; 4371.00; 2290.34
95; 4465.00; 2331.54 95; 4465.00; 2347.26
96; 4560.00; 2387.02 96; 4560.00; 2389.54
97; 4656.00; 2416.54 97; 4656.00; 2413.08
98; 4753.00; 2460.58 98; 4753.00; 2483.92
99; 4851.00; 2562.00 99; 4851.00; 2523.12
100; 4950.00; 2549.66 100; 4950.00; 2608.62
...@@ -41,7 +41,7 @@ def analyser_tri(tri: Callable[[list[T], Callable[[T, T], int]], NoneType], ...@@ -41,7 +41,7 @@ def analyser_tri(tri: Callable[[list[T], Callable[[T, T], int]], NoneType],
res += compare.counter res += compare.counter
return res / nbre_essais return res / nbre_essais
def comp_sort(l:list[T], comp: Callable[[T, T], int] = compare): def tri_comp(l:list[T], comp: Callable[[T, T], int] = compare):
"""à_remplacer_par_ce_que_fait_la_fonction """à_remplacer_par_ce_que_fait_la_fonction
Précondition : Précondition :
...@@ -49,8 +49,7 @@ def comp_sort(l:list[T], comp: Callable[[T, T], int] = compare): ...@@ -49,8 +49,7 @@ def comp_sort(l:list[T], comp: Callable[[T, T], int] = compare):
$$$ $$$
""" """
sorted_l = sorted(l, key= lambda x: comp(x,x)) sorted(l, key= lambda x: comp(x,x))
return sorted_l
if (__name__ == '__main__'): if (__name__ == '__main__'):
...@@ -70,7 +69,7 @@ if (__name__ == '__main__'): ...@@ -70,7 +69,7 @@ if (__name__ == '__main__'):
# inutile de moyenner pour le tri par sélection # inutile de moyenner pour le tri par sélection
c_insert[t] = analyser_tri(tri_insert, NB_ESSAIS, t) c_insert[t] = analyser_tri(tri_insert, NB_ESSAIS, t)
# for sorting # for sorting
c_sort[t] = analyser_tri(comp_sort, NB_ESSAIS, t) c_sort[t] = analyser_tri(tri_comp, NB_ESSAIS, t)
# Sauvegarde des données calculées dans un fichier au format CSV # Sauvegarde des données calculées dans un fichier au format CSV
prem_ligne = 'taille;"tri séléction";"tri insertion"\n' prem_ligne = 'taille;"tri séléction";"tri insertion"\n'
...@@ -80,8 +79,7 @@ if (__name__ == '__main__'): ...@@ -80,8 +79,7 @@ if (__name__ == '__main__'):
for t in range(TAILLE_MAX + 1): for t in range(TAILLE_MAX + 1):
sortie.write(ligne.format(t, sortie.write(ligne.format(t,
c_select[t], c_select[t],
c_insert[t], c_insert[t]))
c_sort[t]))
# Représentation graphique # Représentation graphique
plt.plot(list(range(TAILLE_MAX + 1)), c_select, 'b.', label='Tri sélection') plt.plot(list(range(TAILLE_MAX + 1)), c_select, 'b.', label='Tri sélection')
......
import timeit
import matplotlib.pyplot as plt
\ No newline at end of file
from random import shuffle from random import shuffle
import timeit
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from ap_decorators import count from analyse_tris import tri_select
from compare import compare from math import sqrt
from analyse_tris import analyser_tri
# Préliminaires
def liste_alea(n: int) -> list[int]: def liste_alea(n: int) -> list[int]:
"""construit une liste de longueur n contenant les entiers 0 à n-1 mélangés """construit une liste de longueur n contenant les entiers 0 à n-1 mélangés
...@@ -15,5 +19,69 @@ def liste_alea(n: int) -> list[int]: ...@@ -15,5 +19,69 @@ def liste_alea(n: int) -> list[int]:
shuffle(l) shuffle(l)
return l return l
# Évaluation expérimentale de la complexité en temps
TAILLE_MAX = 100
L = []
T = []
for t in range(1, TAILLE_MAX + 1):
rlist = liste_alea(t)
time = timeit.timeit(stmt='tri_select(l)', setup='from __main__ import tri_select, l', globals={'l': rlist}, number=5000)
L.append(t)
times.append(time)
plt.plot(lengths, times, label='Selection Sort')
plt.xlabel('Length of List')
plt.ylabel('Time (s)')
plt.title('Selection Sort Execution Time')
plt.legend()
plt.grid(True)
plt.show()
#3
import timeit
import matplotlib.pyplot as plt
import random
from analyse_tris import tri_insert
Nmax = 100
number = 5000
best_case = []
average_case = []
worst_case = []
for t in range(1, Nmax + 1):
# Best Case: Sorted List
sorted_list = list(range(t))
best_time = timeit.timeit(stmt='tri_insert(liste)', setup='from __main__ import tri_insert, liste', globals={'liste': sorted_list}, number=number)
best_case.append(best_time)
# Average Case: Random List
random_list = random.sample(range(t), t)
average_time = timeit.timeit(stmt='tri_insert(liste)', setup='from __main__ import tri_insert, liste; import random', globals={'liste': random_list}, number=number)
shuffle_time = timeit.timeit(stmt='random.shuffle(liste)', setup='import random; liste = list(range(t))', globals={'t': t, 'random': random}, number=number)
average_case.append(average_time - shuffle_time)
# Worst Case: Reverse Sorted List
reverse_sorted_list = list(range(t - 1, -1, -1))
worst_time = timeit.timeit(stmt='tri_insert(liste[::-1])', setup='from __main__ import tri_insert, liste', globals={'liste': reverse_sorted_list}, number=number)
reverse_time = timeit.timeit(stmt='liste.reverse()', setup='liste = list(range(t))', globals={'t': t}, number=number)
worst_case.append(worst_time - reverse_time)
# Plotting
plt.plot(range(1, Nmax + 1), best_case, label='Best Case')
plt.plot(range(1, Nmax + 1), average_case, label='Average Case')
plt.plot(range(1, Nmax + 1), worst_case, label='Worst Case')
plt.xlabel('Length of List')
plt.ylabel('Time (s)')
plt.title('Insertion Sort Time Complexity')
plt.legend()
plt.grid(True)
plt.show()
tp7/tris_nbcomp.png

28.8 KiB | W: | H:

tp7/tris_nbcomp.png

28.7 KiB | W: | H:

tp7/tris_nbcomp.png
tp7/tris_nbcomp.png
tp7/tris_nbcomp.png
tp7/tris_nbcomp.png
  • 2-up
  • Swipe
  • Onion skin
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment