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)=a∗w(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.