Adloun

informatique (MP2I/MPI) · Chapitre 3 · Application directe du cours

Un qui bat un

Algorithmes, programmes et complexité · niveau 2

É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.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre