Fusionner deux tas : réinsérer ou reconstruire ?
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 11 — Arbres de recherche, tas et files de priorité
Énoncé
On dispose de deux tas de tailles et et l'on veut leur réunion. Deux procédés :
- (R) réinsérer un à un les éléments du second dans le premier ;
- (C) concaténer les deux tableaux et reconstruire un tas par tassage.
Comparer leurs complexités. Puis les mesurer sur des données aléatoires, et commenter.
Corrigé
Les complexités. (R) coûte au pire : chaque insertion peut remonter jusqu'à la racine. (C) coûte : la concaténation est linéaire et le tassage de Floyd aussi (premier problème ci-après). (C) est donc asymptotiquement meilleur.
Et pourtant. Mesuré sur deux tas de entiers tirés uniformément :
| données aléatoires | pire cas | |
|---|---|---|
| (R) réinsertion | comparaisons | |
| (C) concaténation + tassage | comparaisons |
Sur les données aléatoires, la méthode asymptotiquement moins bonne gagne. La raison : dans un tas aléatoire, un élément inséré remonte en moyenne d'un nombre constant de niveaux — la moitié des places libres sont au dernier niveau, et une valeur tirée au hasard a peu de chances de battre tous ses ancêtres. L'insertion coûte amorti en moyenne, et (R) devient linéaire elle aussi, avec une constante plus petite.
Le pire cas, lui, sépare les deux : en prenant pour second tas des valeurs toutes inférieures à celles du premier, chaque insertion remonte jusqu'à la racine. Mesuré : (R) passe à comparaisons, (C) reste à — un facteur , et le rapport croît en .
La leçon, et elle vaut pour tout ce chapitre. La complexité au pire est une garantie, pas une prédiction. Un algorithme qui gagne sur les données qu'on lui a montrées peut perdre d'un facteur non borné sur celles qu'on ne lui a pas montrées. On choisit (C) non parce qu'elle est plus rapide — elle ne l'est pas toujours — mais parce qu'elle est prévisible. C'est le même argument qui fera préférer le tri par tas au tri rapide sur un système temps réel.
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.