Vous pouvez modifier n'importe quel graphe pour que Dijkstra trouve la solution avec le nombre minimal d'arêtes ainsi:
Multipliez chaque poids de bord par un nombre , puis ajoutez au poids pour pénaliser chaque bord supplémentaire dans la solution, c'est-à-dire
Cela ne fonctionne pas pour toutes les valeurs de ; doit être au moins pour que cela fonctionne. Si n'est pas ce nombre minimum, il se peut qu'il ne choisisse pas le chemin le plus court. Comment trouver cette valeur minimale ?
Ps. Cela a été fait à titre récréatif, j'ai fini mes devoirs il y a longtemps.
algorithms
graph-theory
shortest-path
Le chat unfun
la source
la source
Réponses:
Étant donné un graphiqueG=(V,E,w) , nous définissons G′=(V,E,w′) avec w′(e)=aw(e)+1 où a=|E|+ε pour certains ε≥0 comme proposé dans les commentaires de la question.
Le lemme découle directement de la définition dew′ .
Appelez le résultat de Dijkstra surG′ P , qui est le chemin le plus court G′ . PrésumerP n'était pas un chemin le plus court avec le moins d'arêtes (parmi tous les chemins les plus courts) dans G . Cela peut se produire de deux manières.
Ensuite, il y a un chemin
Ensuite, il y a un autre chemin le plus court
Comme les deux cas ont conduit à une contradiction,P est en effet le chemin le plus court avec le moins d'arêtes G .
Cela couvre la moitié de la proposition. Qu'en est-il dea<|E| , c'est à dire a=|E|−ε avec ε∈(0,|E|) ?
la source