Les deux naïves, chiffrées
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 23 — Unir & trouver, arbres couvrants
Énoncé
On prend et l'on exécute les unions unir(0,1), unir(1,2), …, unir(998,999).
- Combien de cases la première mise en œuvre naïve (tableau de classes) lit-elle en tout ?
- Quelle forêt la seconde produit-elle, et que coûte alors
trouver(0)?
Corrigé
1. Chaque unir balaye le tableau entier, soit lectures ; il y en a . Le total mesuré est de 999 000 lectures — c'est-à-dire, à un facteur près, . Sur le procédé serait injouable.
2. La seconde naïve écrit p.(trouver p x) <- trouver p y. Déroulons : unir(0,1) donne ; unir(1,2) donne ; et ainsi de suite, . La forêt est un peigne de profondeur , enraciné en . Sur , la profondeur mesurée est bien de , et trouver(0) coûte autant de remontées.
Le point commun aux deux : chacune est optimale pour une opération et catastrophique pour l'autre. La suite d'unions ci-dessus est le pire cas des deux à la fois, ce qui est instructif : elle n'a rien d'exotique — c'est simplement l'ordre naturel dans lequel on lit une liste d'arêtes.
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.