Árvore de abrangência mínima versus caminho mais curto


45

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.


Aqui está o meu exemplo de uma pergunta semelhante que prova que a árvore de abrangência mínima não é a mesma com o caminho mais curto. cs.stackexchange.com/a/43327/34363
atayenel

Além disso, isso pode ser interessante. A árvore de abrangência máxima possui caminhos entre nós, onde cada caminho é um caminho de gargalo, ou seja, em vez de minimizar a soma, você maximiza o peso mínimo. Talvez exista uma relação semelhante entre a extensão mínima da árvore.
Eugene

Respostas:


38

x,y,z{x,y},{x,z},{y,z}1{x,y},{y,z}{x,z}

Em conclusão, se você montar todos os caminhos mais curtos, não terá necessariamente uma árvore.


32

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.

x,y,z{x,y}{x,z}{y,z}x{x,y}{x,z}{x,y}{y,z}

árvores: Dijkstra vs Kruskal

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.


12

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.

(A)----5---(B)----5---(C)
 |                     |
 |----------7----------| 

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.


4

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.


1

Eu acho que um exemplo tornará mais claro ..

insira a descrição da imagem aqui

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.

(1)   (4)
  \   /
   (2)
  /   \
(3)   (5)

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 de 5.


-1

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


1
Bem vindo ao site. Não acho que a sua analogia seja boa, já que a rota tomada por um ônibus não parece ter muito a ver com atravessar árvores. Em particular, não é uma extensão (não visita todos os pontos da cidade) e não é uma árvore. Pelo contrário, é algum tipo de caminho (ou ciclo) que visita ou passa perto de quantos pontos significativos forem razoáveis, de modo que a rota seja razoavelmente útil para um número razoavelmente grande de pessoas.
David Richerby

-1

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.

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.