Adloun

Le rang ment, et c'est voulu

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 23 — Unir & trouver, arbres couvrants

Énoncé

Reprendre la forêt de l'exercice « Union par rang : dérouler », de hauteur et de rang , puis exécuter trouver(7) avec compression.

Corrigé

1. L'appel remonte et raccroche et directement à :


avant : parent = [| 0; 0; 0; 2; 0; 4; 4; 6 |]   hauteur 3, rang[0] = 3
apres : parent = [| 0; 0; 0; 2; 0; 4; 0; 0 |]   hauteur 2, rang[0] = 3

La hauteur mesurée est tombée de à ; le rang, lui, n'a pas bougé. Après compression, le rang n'est donc plus la hauteur : c'en est seulement une majoration.

2. Parce que corriger coûterait plus cher que ce que la correction rapporte, et pour deux raisons distinctes.

D'abord, on ne saurait pas quoi écrire : recalculer la hauteur exacte d'un arbre demande de le parcourir entièrement, donc — alors que tout l'intérêt de trouver est de ne toucher qu'un chemin.

Ensuite, on n'en a pas besoin. Ce que la proposition du chapitre exige est une majoration : « un arbre de rang contient au moins éléments », donc . Cette majoration reste vraie après compression, puisque la compression ne change ni le nombre d'éléments ni le rang. La hauteur réelle ne peut que diminuer, donc rester sous : la borne tient toujours.

La leçon générale. Une donnée auxiliaire n'a pas à être exacte : elle doit être exploitable. Ici, le rang est une majoration paresseuse de la hauteur, entretenue en , et c'est tout ce dont la preuve a besoin. Vouloir l'exactitude aurait ruiné la structure.

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.