Adloun

Union par rang : dérouler

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

Énoncé

Sur éléments, on exécute dans l'ordre :

unir(0,1), unir(2,3), unir(4,5), unir(6,7), unir(0,2), unir(4,6), unir(0,4)

Donner le tableau des parents, celui des rangs, et la hauteur de l'arbre obtenu. Aucune compression n'a lieu (on n'appelle trouver que sur des racines).

Corrigé


parent = [| 0; 0; 0; 2; 0; 4; 4; 6 |]
rang   = [| 3; 0; 1; 0; 2; 0; 1; 0 |]

La hauteur vaut , et les profondeurs sont [| 0; 1; 1; 2; 1; 2; 2; 3 |] : un seul élément est à profondeur .

Comment on l'obtient sans exécuter. Les quatre premières unions apparient des rangs : elles créent quatre arbres de rang . Les deux suivantes apparient des rangs : deux arbres de rang . La dernière apparie deux rangs : un arbre de rang . Le rang ne monte que sur une égalité, et c'est ici qu'il monte à chaque étage — c'est un tournoi à élimination directe.

Ce que le tableau des rangs dit. rang[0] = 3 : la racine. rang[4] = 2 et rang[2] = 1 : ce sont d'anciennes racines, dont le rang n'a plus de sens depuis qu'elles ont été accrochées. Le rang n'est lu que sur les racines ; sur les autres nœuds, c'est une trace périmée qu'on ne prend pas la peine d'effacer.

Le nombre d'éléments confirme la proposition du chapitre : rang , donc au moins éléments — et il y en a exactement . Le tournoi est le pire cas de l'union par rang, celui où la borne est atteinte (exercice « La borne est atteinte »).

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.