Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | Prochaine révision Les deux révisions suivantes | ||
tris_alpha [2011/09/18 10:06] tyrtamos |
tris_alpha [2011/09/19 07:32] tyrtamos |
||
---|---|---|---|
Ligne 528: | Ligne 528: | ||
Avec Python 3.x, on utilise la même formule. | Avec Python 3.x, on utilise la même formule. | ||
+ | |||
+ | ===== Tests de performances ===== | ||
+ | |||
+ | Même si le tri utilisé (sort ou sorted) est très rapide, les fonctions de comparaison sont écrites en Python et analysent les chaines caractère par caractère: est-ce suffisamment rapide? | ||
+ | |||
+ | Pour le vérifier, on va créer des chaines au hasard, et on va compter les temps de tri. | ||
+ | |||
+ | Le nombre de chaines à créer est un paramètre. La longueur de chaque chaine est tirée au hasard entre 10 et 50 caractères. Et chaque caractère est tiré au hasard dans la chaine de référence alpha. Cela donne des chaines bizarres comme %%" | ||
+ | |||
+ | <code python> | ||
+ | from time import clock | ||
+ | |||
+ | alpha = ur""" | ||
+ | u" | ||
+ | u" | ||
+ | u" | ||
+ | lgalpha = len(alpha) | ||
+ | |||
+ | L = [] | ||
+ | n = 1000 | ||
+ | for i in xrange(0, | ||
+ | lg = randint(10, | ||
+ | ch = u"" | ||
+ | for j in xrange(0, | ||
+ | ch += alpha[randint(0, | ||
+ | L.append(ch) | ||
+ | |||
+ | t = clock() | ||
+ | L.sort(cmp=compalphafr) | ||
+ | t = clock()-t | ||
+ | |||
+ | print t | ||
+ | </ | ||
+ | |||
+ | Résultats: | ||
+ | * 1000 chaines à trier: 5/100 seconde | ||
+ | * 10000 chaines à trier: 7/10 seconde | ||
+ | * 100000 chaines à trier: 10 secondes | ||
+ | * 1000000 chaines à trier: 2 minutes | ||
+ | |||
+ | Ce qui n'est pas mal du tout pour du code interprété. | ||
+ | |||
+ | Et pour la recherche dichotomique? | ||
+ | |||
+ | Prenons la dernière liste de 1000000 (un million) de chaines, et voyons le temps nécessaire pour trouver l'une des chaines x dans cette liste: | ||
+ | |||
+ | <code python> | ||
+ | x = L[4999] | ||
+ | t = clock() | ||
+ | r = dichot(x, L, comp=compalphafr, | ||
+ | t = clock()-t | ||
+ | print r | ||
+ | print t | ||
+ | </ | ||
+ | Le résultat correct ([0,4999]) est trouvé en... 2/10000 seconde! Ça vous suffira comme rapidité? | ||