Combien d'insertions dans la file de priorité ?
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 19 — Parcours de graphes et plus courts chemins
Énoncé
Le chapitre justifie le if not fige.(u) en disant que la file contient alors éléments au lieu de . Le chiffrer sur le graphe précédent, et donner la borne exacte.
Corrigé
Mesure sur le graphe de l'exercice précédent (, ) :
insertions = 8 extractions = 8 extractions ignorees = 2
Huit insertions pour six sommets : les deux surnuméraires sont le doublé par , et le doublé par — exactement les deux relâchements « perdants » repérés à l'exercice précédent.
La borne exacte. Une insertion a lieu à chaque relâchement réussi, c'est-à-dire à chaque fois qu'un arc améliore . Chaque arc n'est examiné qu'une fois — lorsque son origine est figée — et ne peut donc provoquer qu'une insertion au plus. Avec la source, cela donne
et le même compte pour les extractions. La complexité est donc , que l'on écrit puisque et donc .
Pourquoi on préfère les doublons à la modification de priorité. Un tas binaire (chapitre chap:tas) ne sait pas diminuer la clé d'un élément qu'il contient : il faudrait savoir où il se trouve, donc maintenir un index sommet position et le mettre à jour à chaque échange du tas. C'est faisable, cela ramène la file à éléments — et cela coûte une structure de plus, un invariant de plus, et une source de fautes de plus. Le doublon échange de la mémoire contre de la simplicité, et c'est presque toujours le bon échange.
Et ce que la garde protège. Sans le if not fige.(u), l'extraction redondante de (avec l'estimation périmée ) relâcherait à nouveau ses arcs, à partir d'une valeur fausse. Les distances resteraient correctes — un relâchement ne peut qu'améliorer — mais le nombre d'insertions cesserait d'être borné par : chaque doublon en engendrerait d'autres. La garde n'est pas là pour la correction, elle est là pour la complexité, ce qui est précisément le contraire de la garde de Boyer-Moore du chapitre chap:textes.
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.