Dijkstra(G,w,s) {
ISS(G,s);
let S be an empty set
let Q be a priority queue, initialized with V[G]
while Q is not Empty:
u<-extractMin(Q);
add u to S
for each vertex v neighbor of u
Relax(u,v,w);
}
ma question est, pourquoi est-il important de choisir le MINIMUM d [v] de tout v dans Q à chaque étape de l'algorithme dans la boucle while, ce qui est Gonna heppen si nous ne choisir le minimum ? Je veux dire par la façon dont je le vois, toutes les arêtes (u, v) vont se relaxer dans un ordre de grandeur (signifie que si - s-> u-> v et (s, v) pas dans E alors (s, u) se relâcherait avant (u, v)), alors pourquoi est-il important de choisir le d [v] minimal à chaque fois?Dijkstra algorithme propriété
suppose qu'il existe une fonction extractMaxFiniteD (Q) qui renvoie sommet v tel qu'il a max d [v] soit fini dans Q
laisse supposer que l'on change de ligne u < -extractMaxFiniteD (Q); quelqu'un peut-il me dessiner un graphique dans lequel l'alg modifié échouerait - ou même mieux - quelle propriété du chemin le plus court serait violée?
Je sais que cette question pourrait être assez difficile et abstraite, mais ce serait génial si some1 pourrait m'aider avec cela.
Avez-vous réellement l'essayer sur N'IMPORTE QUEL graphique? La probabilité que l'utilisation de Max donne des résultats incorrects est TRÈS élevée! –
im moins intrested dans un graphique spécifique, je veux comprendre quelle propriété nous essayons de préserver en choisissant le minimum chaque étape. –
Si vous faites cela sur presque n'importe quel graphique, en allant pas à pas et en voyant les résultats intermédiaires, vous comprendrez le but de min –