2015-08-28 2 views
0

J'ai le chemin le plus court calculé à l'aide d'un algorithme dijkstra correctement implémenté. Il va de A à F via B, C, D et E. Donc le chemin le plus court est [A, B, C, D, E, F]. Maintenant, je veux passer de G à F. Quand je sors C de la file, je réalise qu'il fait partie du chemin le plus court vers F. Est-ce que cela veut dire que je sais aussi que le chemin le plus court de G à F est [ G, H, C, D, E, F]?Création d'un noeud du plus court chemin de la file d'attente à l'aide de dijkstra

enter image description here

Répondre

2

Non, mais il ne dire que le plus court chemin de C à F est [C, D, E, F].

S'il y avait un chemin plus court, P nous contruct un nouveau chemin de A à F [A, B, [P]] qui est intrinsèquement plus court que notre chemin original. Ceci est une contradiction car nous avons supposé que [A, B, C, D, E, F] était le chemin le plus court de A à F.

Cela peut être généralisé pour prouver que le sous-chemin d'un chemin le plus court est aussi un chemin le plus court. Dans votre cas, cela signifie que si le chemin le plus court de G à F contient C, alors ce chemin le plus court contient [C, D, E, F] comme sous-chemin. Puisque vous ne savez pas si C est dans votre chemin le plus court, ce théorème ne vous aidera à réduire le nombre de calculs que si vous stockez le poids du chemin le plus court de C à F.

+0

C'est probablement la raison pour laquelle les gens tirent généralement des coûts lorsqu'ils dessinent des graphiques. Évidemment, je -> F pourrait, par exemple, Soit 6, C -> F aussi 6 et H -> 1. Mon mauvais. Merci les gars. – marcus

1

Je ne pense pas, puisque vous devez prendre en compte la distance de H à C. si la distance [H, C] est énorme, disons supérieure à la distance [H, SI]?

+0

Mais si [H, I, F] être plus court que [H, C] j'arriverais à F avant de faire sauter C de la file d'attente ?! – marcus

+2

Mais considérons que [H, I] a un poids supérieur à [H, C] mais le reste du chemin, [I à F] a un poids beaucoup plus petit que [C, D, E, F] –

+0

Je suis d'accord. Le mien était un mauvais exemple. Mais je pense que celui dans le commentaire de Michael est correct et clarifiant. –