Dijkstra privilégie une solution avec le plus petit nombre d'arêtes si plusieurs chemins ont le même poids


9

Vous pouvez modifier n'importe quel graphe pour que Dijkstra trouve la solution avec le nombre minimal d'arêtes ainsi:G

Multipliez chaque poids de bord par un nombre , puis ajoutez au poids pour pénaliser chaque bord supplémentaire dans la solution, c'est-à-direa1

w(u,v)=aw(u,v)+1

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 ?aaxax

Ps. Cela a été fait à titre récréatif, j'ai fini mes devoirs il y a longtemps.


Si deux chemins ont un poids égal, celui avec le moins d'arêtes doit être choisi. Désolé. Je vois que je n'ai pas précisé cela.
The Unfun Cat

1
Vous pouvez également le faire en ajoutant ϵ à tous les poids de bord, où ϵ<m/e, m = poids minimal des bords, e = nombre d'arêtes dans le chemin le plus court (ou même globalement, si vous ne connaissez pas la longueur du chemin le plus court) .
BlueRaja - Danny Pflughoeft

1
Friandise intéressante, merci. Faudra le regarder.
The Unfun Cat

Réponses:


5

Étant donné un graphique G=(V,E,w), nous définissons G=(V,E,w) avec w(e)=aw(e)+1a=|E|+ε pour certains ε0 comme proposé dans les commentaires de la question.

Lemma
LetP un chemin dans G avec coût C, c'est à dire w(P)=C. Alors,P a coûté aC+|P| dans G, c'est à dire w(P)=aC+|P|.

Le lemme découle directement de la définition de w.

Appelez le résultat de Dijkstra sur G 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.

  1. P n'est pas le chemin le plus court G.
    Ensuite, il y a un cheminP avec w(P)<w(P). Comme|P|,|P||E|a, cela implique que w(P)<w(P)avec le lemme ci-dessus¹. Cela contreditP a été choisi comme chemin le plus court G.
  2. Pest un chemin le plus court mais il y a un chemin le plus court avec moins d'arêtes.
    Ensuite, il y a un autre chemin le plus courtP -- c'est à dire w(P)=w(P) -- avec |P|<|P|. Cela implique quew(P)<w(P) par ci-dessus lemme, ce qui contredit à nouveau que P est le chemin le plus court G.

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|)?


  1. En fait, nous avons également besoin de cela a ou tous les poids Gsont des entiers. Autrement,w(P)<w(P) ne cause pas les poids G être au moins |E|une part. Ce n'est cependant pas une restriction; nous pouvons toujours évoluerw avec un facteur constant afin que tous les poids soient entiers, en supposant que nous commençons par des poids rationnels.

Je n'ai pas encore pu apporter la preuve que a=|E| est le plus petit apour lequel cela fonctionne. Je vais y réfléchir davantage.
Raphael
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.