Dijkstra para favorecer a solução com menor número de arestas, se vários caminhos tiverem o mesmo peso


9

Você pode modificar qualquer gráfico G de modo que Dijkstra's encontre a solução com o número mínimo de arestas assim:

Multiplique cada peso de borda com um número ae adicione 1 ao peso para penalizar cada aresta adicional na solução, ou seja,

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

Isso não funciona para todos os valores de ; precisa ser pelo menosaaxpara que isso funcione. E seanão é esse número mínimo, ele pode não escolher o caminho mais curto. Como encontro esse valor mínimox?

Ps. Isso foi feito de forma recreativa, eu terminei com a lição de casa há muito tempo.


Se dois caminhos tiverem o mesmo peso, o caminho com menos arestas deve ser escolhido. Desculpa. Vejo que não deixei isso claro.
The Unfun Cat

1
Você também pode fazer isso adicionando ϵ a todos os pesos da borda, onde ϵ<m/e, m = peso mínimo da aresta, e = número de arestas no caminho mais curto (ou mesmo no geral, se você não souber o menor comprimento do caminho) .
BlueRaja - Danny Pflughoeft 5/10

1
Boato interessante, obrigado. Terá que olhar para ele.
The Unfun Cat

Respostas:


5

Dado um gráfico G=(V,E,w), definimos G=(V,E,w) com W(e)=umaW(e)+1 Onde a=|E|+ε para alguns ε0 como proposto nos comentários da pergunta.

Lema
LetP um caminho em G com custo C, ie w(P)=C. Então,P tem custo aC+|P| no G, ie w(P)=aC+|P|.

O lema segue diretamente da definição de w.

Ligue para o resultado de Dijkstra em G P, que é o caminho mais curto da G. PresumirP não era o caminho mais curto com menos arestas (entre todos os caminhos mais curtos) G. Isso pode acontecer de uma de duas maneiras.

  1. P não é o caminho mais curto G.
    Então, existe um caminhoP com w(P)<w(P). Como|P|,|P||E|a, isso implica que também w(P)<w(P)com lema acima. Isso contradiz queP foi escolhido como o caminho mais curto G.
  2. Pé um caminho mais curto, mas existe um caminho mais curto com menos arestas.
    Então, existe outro caminho mais curtoP - ie w(P)=w(P) - com |P|<|P|. Isso implica quew(P)<w(P) pelo lema acima, o que contradiz novamente que P é o caminho mais curto G.

Como ambos os casos levaram a uma contradição, P é realmente um caminho mais curto com menos arestas em G.


Isso cobre metade da proposição. A respeitoa<|E|, ie a=|E|ε com ε(0,|E|)?


  1. Na verdade, também precisamos disso a ou todos os pesos em Gsão inteiros. De outra forma,w(P)<w(P) não causa os pesos em G ser pelo menos |E|separados. Isso não é uma restrição; sempre podemos escalarw com um fator constante para que todos os pesos sejam inteiros, supondo que começamos com pesos racionais.

Ainda não consegui provar que a=|E| é o menor apara o qual isso funciona. Vou pensar um pouco mais.
Raphael
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.