O gráfico possui duas / três árvores de abrangência mínima diferentes?


15

Estou tentando encontrar um método eficiente para detectar se um determinado gráfico G tem duas árvores abrangentes mínimas diferentes. Também estou tentando encontrar um método para verificar se ele possui três árvores abrangentes mínimas diferentes. A solução ingênua que pensei é executar o algoritmo de Kruskal uma vez e encontrar o peso total da árvore de abrangência mínima. Posteriormente, removendo uma aresta do gráfico e executando o algoritmo de Kruskal novamente e verificando se o peso da nova árvore é o peso da árvore de abrangência mínima original e o mesmo para cada aresta no gráfico. O tempo de execução é O (| V || E | log | V |), o que não é bom, e acho que há uma maneira melhor de fazê-lo.

Qualquer sugestão seria útil, obrigado antecipadamente


Seria bom para ser awared de tal algoritmo, mas não vai resolver este problema atual
itamar

2
O gráfico terá uma árvore de abrangência mínima exclusiva se e somente se (1) para qualquer partição de V ( G ) em dois subconjuntos, a borda de peso mínima com um ponto de extremidade em cada subconjunto for única e (2) o peso máximo A borda em qualquer ciclo de G é única. GV(G)G
Juho 15/05

Essas e as perguntas um e dois já respondem à sua pergunta?
Juho 15/05

Veja o problema 23-1 no CLRS para saber como encontrar o segundo melhor MST em . O(n2)
Kaveh

Respostas:


7

Kapoor & Ramesh ( versão apropriada do SIAM J. Comput. , Versão gratuita (?) Do site pessoal ) fornecem um algoritmo para enumerar todas as árvores abrangentes mínimas nos gráficos ponderados e não ponderados.

Meu entendimento da idéia básica é que você comece com um MST e depois troque as arestas que se estendem ao longo dos ciclos no gráfico (desde que os pesos estejam corretos, você está substituindo uma aresta por outra que você sabe que reconectará a árvore) .

Para o caso ponderado, eles fornecem um tempo de execução para listar todas as árvores abrangentes mínimas de que N é o número dessas árvores abrangidas. Ele os enumera em ordem crescente de peso, e meu entendimento atual (superficial) sugere que é perfeitamente viável finalizar o algoritmo após a geração de um determinado número de árvores (como ele apenas começa com o MST e as produz sequencialmente).O(N|V|)N


Nesta situação aqui, gostaríamos de abortar o algoritmo cedo, pois sabemos que existem mais de soluções. O algoritmo permite isso? k
Raphael

11
@ Rafael, eu não tive tempo de realmente lidar com isso (marcação de atribuição), mas, pelo meu entendimento, deve ser possível - começa com algum MST e gera outros um a um a partir dele.
Luke Mathieson

11
@SaeedAmiri: "O número de tais árvores de expansão" significa "o número de mínimos árvores de expansão", e não "o número de abrangendo árvores". Se todas as árvores abrangidas forem árvores abrangidas mínimas, o gráfico de entrada estará completo e todas as arestas terão peso igual. nn2
21413 JeffE

11
O documento considera gráficos ponderados e não ponderados; portanto, ambos estão certos;). Eu também acho que o algoritmo permite a possibilidade de parar após a geração do número de árvores que você deseja, portanto, para OP, isso leva a . Mais uma vez, preciso de tempo livre para ter uma visão melhor. O(|V|)
Luke Mathieson

11
Após uma leitura rápida, o algoritmo ponderado gera as árvores em ordem crescente de peso (a partir de um MST obviamente). Assim deveria ser para os propósitos do OP.
Luke Mathieson

2

Pode-se mostrar que o algoritmo de Kruskal pode encontrar todas as árvores de abrangência mínimas; veja aqui .

Portanto, você pode executar o Kruskal e, sempre que tiver várias arestas para escolher, ramificar. Depois de ramificar vezes, você sabe que existem pelo menos k diferentes árvores de abrangência mínima. kkInfelizmente, várias ramificações podem resultar na mesma árvore adicionando arestas do mesmo peso em ordens diferentes, portanto, isso não ajuda muito sem mais trabalho / insight.


5
Não. Se você tiver que escolher entre arestas em uma etapa, pode ser que essas k arestas estejam em todas as árvores estendidas. Tomemos, por exemplo, apenas uma estrela K 1 , 5 com todas as arestas de peso 1. Primeiro passo, é preciso escolher entre as 5 arestas, etc. Mas, obviamente, existe apenas uma árvore de abrangência. Talvez contar o número de arestas com o mesmo peso até uma aresta incluída na árvore de abrangência deixadas de fora ajude? Pergunta interessante ...kkK1,5
vonbrand

@vonbrand Bom ponto. Podemos continuar concluindo todas as ramificações do cálculo, é claro, mas o tempo de execução é determinado pelo número de árvores de abrangência, que pode ser exponencial.
Raphael

1

Para verificar se há mais de um MST, considere, por exemplo, o algoritmo de Kruskal. A única maneira de construir diferentes MSTs é deixando de fora as arestas, escolhendo outra quando houver várias com o mesmo peso. Mas essas arestas com o mesmo peso podem ter sido descartadas porque formaram um ciclo com arestas mais claras ...

Portanto, você deve executar o algoritmo de Kruskal e, quando houver várias arestas com o mesmo peso a considerar, adicione todas elas que possam ser adicionadas sem criar ciclos. Se sobrar uma aresta desse peso e não fechar um ciclo com nenhuma das arestas com pesos mais baixos (que foram adicionados antes), haverá mais de um MST. Verificar se há exatamente 2 ou 3 ou mais, etc., parece muito mais difícil ...


0

Modificando o algoritmo de Kruskal: Ao ordenar as arestas, agrupe as arestas com o mesmo peso. Agora, no ponto em que você processa as arestas em ordem, sempre que atingir um novo cluster, verifique primeiro todas as arestas separadamente e remova do cluster aquelas que fechariam um ciclo, considerando o que foi construído antes do cluster. Em seguida, execute todas as bordas restantes no cluster agora tentando adicioná-las ao MST. Se algum deles fecha um ciclo, isso foi necessariamente por causa de outras arestas do mesmo cluster inseridas anteriormente, o que significa que você tem mais de um MST.

Essa solução preserva a complexidade do algoritmo de Kruskal, mas aumenta o tempo de cada borda processada.


Você parece estar afirmando que pode processar um cluster inteiro em tempo constante, mas não vejo nenhuma constante óbvia vinculada ao tamanho de um cluster. Você poderia dar mais detalhes sobre como esse estágio é realizado?
David Richerby
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.