Você pode modificar qualquer gráfico 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 e adicione ao peso para penalizar cada aresta adicional na solução, ou seja,
Isso não funciona para todos os valores de ; precisa ser pelo menospara que isso funcione. E senão é esse número mínimo, ele pode não escolher o caminho mais curto. Como encontro esse valor mínimo?
Ps. Isso foi feito de forma recreativa, eu terminei com a lição de casa há muito tempo.
algorithms
graph-theory
shortest-path
The Unfun Cat
fonte
fonte
Respostas:
Dado um gráficoG = ( V, E, W ) , definimos G′= ( V, E,W′) com W′( e ) = a w ( e ) + 1 Onde a=|E|+ε para alguns ε≥0 como proposto nos comentários da pergunta.
O lema segue diretamente da definição dew′ .
Ligue para o resultado de Dijkstra emG′ 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.
Então, existe um caminho
Então, existe outro caminho mais curto
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|) ?
fonte