Marquer au retrait : chiffrer ce que cela coûte
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 19 — Parcours de graphes et plus courts chemins
Énoncé
Le chapitre met en garde : il faut marquer un sommet au moment de l'ajouter à la réserve, jamais au moment de le retirer. Chiffrer précisément le coût de la mauvaise version : combien de fois un sommet entre-t-il dans la réserve ?
Corrigé
Mesures (nombre total d'entrées dans la réserve, parcours en largeur depuis ) :
| Graphe | marquage à l'ajout | marquage au retrait | ||
|---|---|---|---|---|
| celui de l'exercice précédent | ||||
| (complet) | ||||
| (biparti complet) |
La colonne de droite vaut systématiquement .
La borne, et sa démonstration. Chaque insertion de est provoquée par le traitement d'un voisin , donc par une arête . Une même arête ne peut servir deux fois : une fois retiré et marqué, il n'est plus jamais traité. Le nombre total d'insertions est donc au plus (la source comprise). C'est atteint sur les graphes ci-dessus, où tout sommet a des voisins encore non marqués au moment où on l'examine.
Ce que cela coûte réellement. La réserve contient éléments au lieu de : c'est la mémoire qui explose, pas le temps. Sur , la file monte à éléments au lieu de . Le temps reste , puisque chaque insertion est en et qu'il y en a .
Une nuance sur l'affirmation du chapitre. Le chapitre écrit « la complexité pourrait exploser — jusqu'à ». La mesure ne le confirme pas : même en supprimant tout test avant l'empilement, on plafonne à insertions ( mesurées sur , pour ). Le surcoût est un facteur , pas un carré. Cela n'affaiblit pas la règle : marquer à l'ajout reste la seule écriture correcte, et la raison en est la mémoire. Mais elle mérite d'être dite juste.
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.