Un qui bat un
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 3 — Algorithmes, programmes et complexité
Énoncé
Le tri par insertion est quadratique, le tri par partition-fusion est quasi-linéaire. Mesurer les deux sur des tableaux aléatoires de tailles croissantes. Que constate-t-on, et qu'en conclure ?
Corrigé
Mesure sur des tableaux de int tirés au hasard, compilés en -O2, temps moyen par tri :
n | insertion (us) | fusion (us) | gagnant
48 | 0,28 | 0,55 | insertion
64 | 0,44 | 0,75 | insertion
80 | 0,78 | 1,03 | insertion
96 | 1,12 | 1,28 | insertion
112 | 1,74 | 1,65 | fusion
128 | 2,12 | 1,85 | fusion
256 | 7,55 | 4,32 | fusion
512 | 28,95 | 10,18 | fusion
4096 | 1515,30 | 117,70 | fusion
16384 | 23733,69 | 621,68 | fusion
Le tri quadratique gagne jusque vers , et le point de bascule est net. Les ordres de grandeur ne sont pourtant pas démentis : de à , le temps du tri par insertion est multiplié par (on attendait pour un quadruplement de ), celui du tri par fusion par (on attendait ).
Ce que dit vraiment un . Écrire et , c'est affirmer l'existence de constantes telles que et . La comparaison équivaut à : elle est vraie pour les petits dès que . Or c'est le cas ici : le tri par insertion ne fait que comparer et décaler, sur des cases voisines en mémoire ; le tri par fusion appelle, alloue un tableau auxiliaire, et recopie.
La conclusion, et elle est double.
- L'ordre de grandeur reste la bonne mesure, car il décide du comportement pour les grands — et le facteur à le montre. Aucune constante ne sauve un quadratique sur de grandes données.
- Il ne décide de rien en dessous du seuil de bascule. C'est pourquoi les bibliothèques de tri réelles emploient un tri par insertion sur les segments courts et basculent sur un tri récursif au-delà : elles prennent le meilleur des deux, et le seuil se mesure, il ne se devine pas.
Le chapitre l'annonçait : « un battra un sur les petites entrées et perdra toujours sur les grandes ». Ici, la phrase est chiffrée.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.