Qual é a diferença entre o algoritmo mínimo de spanning tree e um algoritmo de caminho mais curto?
Na minha classe de estruturas de dados, cobrimos dois algoritmos de spanning tree mínimo (Prim e Kruskal) e um algoritmo de caminho mais curto (Dijkstra).
Árvore de abrangência mínima é uma árvore em um gráfico que abrange todos os vértices e o peso total de uma árvore é mínimo. O caminho mais curto é bastante óbvio, é o caminho mais curto de um vértice para outro.
O que eu não entendo é que, uma vez que a árvore de abrangência mínima tem um peso total mínimo, os caminhos na árvore não seriam os caminhos mais curtos? Alguém pode explicar o que estou perdendo?
Qualquer ajuda é apreciada.
algorithms
shortest-path
spanning-trees
queimadura
fonte
fonte
Respostas:
Em conclusão, se você montar todos os caminhos mais curtos, não terá necessariamente uma árvore.
fonte
Você está certo de que os dois algoritmos de Dijkstra (caminhos mais curtos de um único nó inicial) e Prim (árvore de abrangência de peso mínimo iniciando em um determinado nó) têm uma estrutura muito semelhante. Ambos são gananciosos (pegam a melhor aresta do ponto de vista atual) e constroem uma árvore que mede o gráfico.
O valor que eles minimizam, no entanto, é diferente. Dijkstra seleciona como borda seguinte a que sai da árvore para um nó ainda não escolhido mais próximo ao nó inicial. (Então, com essa opção, as distâncias são recalculadas.) Prim escolhe como borda a mais curta que sai da árvore construída até agora. Portanto, ambos os algoritmos escolheram uma "borda mínima". A principal diferença é o valor escolhido para ser mínimo. Para Dijkstra, é o comprimento do caminho completo, do nó inicial ao nó candidato, para Prim, é apenas o peso dessa aresta única.
Quanto a Kruskal , isso é um pouco diferente. Ele resolve a árvore de abrangência mínima, mas durante a execução escolhe arestas que podem não formar uma árvore, elas apenas evitam ciclos. Portanto, as soluções parciais podem ser desconectadas. No final, você recebe uma árvore.
fonte
Embora a computação dos algoritmos Spanning Tree Mínimo e Shortest Path pareça semelhante, eles se concentram em 2 requisitos diferentes.
No MST, o requisito é atingir cada vértice uma vez (criar árvore de gráficos) e o custo total (coletivo) de atingir cada vértice deve ser o mínimo entre todas as combinações possíveis.
No caminho mais curto, o requisito é alcançar o vértice de destino do vértice de origem com o menor custo possível (menor peso). Portanto, aqui não nos preocupamos em atingir cada vértice, apenas nos concentramos nos vértices de origem e destino e é aí que reside a diferença.
Aqui está o exemplo para esclarecer por que o MST não fornece necessariamente o caminho mais curto entre 2 vértices.
No caso MST, as bordas AB. O BC estará no MST com peso total de 10. Portanto, o custo para atingir A a C no MST é 10.
Porém, no caso do Caminho Mais Curto, o caminho mais curto entre A e C é AC, que é 7. AC nunca esteve no MST.
fonte
A diferença está no que é o objetivo final desses algoritmos -
Dijkstra's - Aqui o objetivo é chegar do início ao fim. Você está preocupado apenas com esses 2 pontos e otimize seu caminho de acordo.
Krusal's - Aqui você pode começar de qualquer ponto e visitar todos os outros pontos do gráfico. Portanto, nem sempre você pode escolher o caminho mais curto para dois pontos. Em vez disso, o foco é escolher o caminho que o levará a um caminho mais curto para todos os outros pontos.
fonte
Eu acho que um exemplo tornará mais claro ..
A árvore se estende abaixo. Isso ocorre porque, se somarmos as arestas nessa configuração, obteremos o menor custo total possível : 2 + 5 + 14 + 4 = 25.
Ao olhar a árvore de abrangência, você pode pensar falsamente que ela oferece os caminhos mais curtos, mas na prática ela não oferece. Como exemplo: se quiséssemos ir do nó
(1)
para(4)
o custo, nos custaria 7. No entanto, se usássemos o algoritmo de Dijkstra no gráfico original, descobriríamos que podemos ir diretamente do nó(1)
para o(4)
custo de5
.fonte
Exemplo prático para mostrar a diferença>
Suponha que você chegue de trem a uma cidade e queira chegar ao seu hotel.
Opção 1: Pegue um táxi: O táxi seguirá o caminho mais curto até o hotel da estação. Se o motorista seguir um caminho ao longo do caminho mais curto, centralizado na estação.
Opção 2: Pegue um ônibus. A empresa de ônibus quer atender muitas pessoas, não apenas você. O caminho ideal incluiria todos os pontos-chave da cidade. Por isso, seguirá (*) um caminho ao longo da árvore de abrangência mínima. É por isso que o ônibus é mais lento, mas como os custos são compartilhados, é mais barato.
(*) Na verdade, as pessoas reclamariam se a árvore de abrangência mínima fosse usada (a viagem de ônibus seria muito longa). Portanto, na prática, seria uma solução mista e usaria uma Árvore Alfa (a meio caminho entre uma árvore de abrangência mínima e uma árvore de caminho mais curto).
fonte
Eles são baseados em duas propriedades diferentes. A extensão mínima da árvore é baseada na propriedade de corte, enquanto o Caminho mais curto se baseia na propriedade de relaxamento da borda.
Um corte divide um gráfico em dois componentes. Pode envolver várias arestas. No MST, selecionamos a aresta com o menor peso.
O relaxamento das bordas diz que, dado que eu sei a distância entre A e B: dist (a, b) e dist entre A e C: dist (a, c), se dist (a, b) + borda (b, c) for menor que dist (a, c), então eu posso relaxar a borda (ac). Depois de relaxar todas as bordas, obtemos o caminho mais curto.
Eu recomendo assistir ao vídeo sobre algoritmos gráficos do professor Robert Sedgewick.
fonte