Je revois mes anciennes notes d'algorithmes et j'ai trouvé cette preuve. C'était d'une mission que j'avais et je l'ai eu raison, mais je pense que la preuve manque certainement.Prouver que les valeurs de distance extraites dans l'algorithme de Dijkstra ne sont pas décroissantes?
La question est de prove that the distance values taken from the priority queue in Dijkstra's algorithm is a non-decreasing sequence.
Ma preuve est la suivante:
Preuve par contradiction. Fist, supposons que nous tirons un sommet de Q avec d-value 'i'. La prochaine fois, nous tirerons un sommet avec la valeur d '' j '. Lorsque nous tiré i, nous avons finalisé notre valeur d et calculé le chemin le plus court du sommet de départ, s, à i. Depuis nous avons des poids de bord positifs, il est impossible pour nos valeurs de D pour réduire comme nous ajoutons des vertices à notre chemin. Si après avoir tiré je de Q, nous tirons j avec une valeur d plus petite, nous ne pouvons pas avoir un chemin le plus court vers moi, car nous pouvons être capable d'atteindre i à j. Cependant, nous avons déjà calculé le chemin le plus court à i. Nous n'avons pas vérifié un chemin possible . Nous n'avons plus de chemin garanti . Contradiction.
Comment cette preuve peut-elle être améliorée? Ou mieux encore, y a-t-il une approche différente? Il semble juste assez faible :)
Edit: Désolé, dans ce cas, ma file d'attente prioritaire est mise en œuvre avec un mini-tas
Dans la mise en œuvre de pseudocode classique de l'algorithme de Dijkstra la mise en œuvre de la file d'attente de priorité n'est pas définie.Personne n'a répondu, car il est difficile de faire la preuve sans l'implémentation (même en pseudo-code) utilisée pour la file d'attente prioritaire. Pourriez-vous ajouter une référence dans la question? –
Désolé, j'ai mis à jour :) Point valide – Gail