Esta versão densa do algoritmo de Kruskal é conhecida?

15

Há cerca de um ano, um amigo e eu pensamos em uma maneira de implementar o algoritmo de Kruskal para gráficos densos melhor do que o usual vinculado (sem assumir arestas pré-classificadas). Especificamente, atingimos Θ ( n 2 ) em todos os casos, semelhante ao Prim quando implementado usando matrizes de adjacência.O(mregistrom)Θ(n2)

Publiquei um pouco sobre o algoritmo em meu blog , incluindo códigos e benchmarks C ++, mas aqui está a ideia geral:

  • Mantenha um nó representativo para cada componente conectado. Inicialmente, todos os nós se representam.

  • Mantenha um vetor dist[i]que, para cada componente i, tenha o menor incidente na borda de cruzamento de componentes i.

  • Ao encontrar a aresta mais leve que atravessa as partições, basta descobrir ique minimiza o peso de dist[i], em tempo linear.

  • Ao unir dois componentes e c j , modifique a matriz de adjacência A , de modo que agora A i , k = min { A i , k , A j , k } para todos os componentes k , e marque i como não mais representativo de sua componente conectado (apenas jcEucjUMAUMAEu,k=min{UMAEu,k,UMAj,k}kEuj permanecerá agora).

A contração da borda mais leve e a descoberta da referida borda podem, assim, ser feitas em tempo linear. Fazemos isso vezes para encontrar o MST. É necessária uma pequena contabilidade para descobrir qual borda queremos adicionar ao MST, mas não aumenta a complexidade. Assim, o tempo de execução é Θ ( n 2 ) . A implementação é apenas um par de loops.n-1Θ(n2)

Esta versão do Kruskal é bem conhecida na literatura?

Federico Lebrón
fonte

Respostas:

19

O(n2)O(n2)

  1. Use Prim – Dijkstra – Jarník e classifique as arestas para obter a sequência de inserção que Kruskal daria ou

  2. Use a estrutura de dados do par mais próximo quadtree descrita no artigo, vendo Kruskal como um procedimento de cluster aglomerado padrão, no qual mesclamos os dois grupos mais próximos em um superaglomerado a cada etapa, com "mais próximo" definido como o comprimento da borda mais curta que conecta dois grupos .

A solução 2 é semelhante em espírito ao que você descreve, mas os detalhes de como acompanhar as distâncias entre os clusters são um pouco diferentes. Você mantém os mínimos de linha da matriz de distância do cluster, permitindo que você digitalize esta lista de mínimos de linha em tempo linear para encontrar o mínimo global, enquanto meu trabalho sobrepõe um quadtree na mesma matriz e mantém o controle do mínimo em cada quadtree square. Seu método é mais simples, mas menos flexível para alguns outros problemas dinâmicos do par mais próximo (depende do fato de que a fusão de dois clusters faça com que as distâncias deles com outros clusters diminuam, verdadeiro para esse problema, mas não necessariamente para outros).

O(n2)O(n2)O(n)

David Eppstein
fonte