Árvore geradora mínima: Kruskal e Prim

Ligue todos os pontos entre si usando o mínimo de estrada possível. Kruskal começa pelas estradas mais curtas e rejeita qualquer uma que feche um ciclo; Prim faz crescer uma única rede a partir de A e escolhe sempre a estrada mais curta que sai dela. Avance passo a passo por qualquer dos algoritmos para ver por que razão cada estrada é escolhida ou rejeitada. Arraste os pontos e a árvore volta a formar-se.

A carregar a simulação interativa...

Lição

A teoria — Árvore geradora mínima: Kruskal e Prim

Uma árvore geradora de um conjunto de pontos é um conjunto de estradas que permite ligar qualquer ponto a qualquer outro sem conter ciclos; com n pontos, tem sempre n − 1 estradas. A árvore geradora mínima é a árvore geradora de menor comprimento total. Um corte divide os pontos em dois grupos, e uma estrada atravessa o corte quando as suas extremidades pertencem a grupos diferentes. Uma árvore de Steiner também pode usar junções que não pertencem ao conjunto inicial de pontos.

O que significa cada símbolo

n
o número de pontos
w(u, v)
o comprimento, em km, da estrada em linha reta entre u e v
S
os pontos de um dos lados de um corte; no algoritmo de Prim, a rede construída até ao momento
Pressupõe
As estradas são retas, o seu custo é igual ao comprimento e quaisquer dois pontos podem ser ligados. Se todas as distâncias forem diferentes, a árvore geradora mínima é única. Quando há empates, como no triângulo e no quadrado, várias árvores podem partilhar o comprimento mínimo e os dois algoritmos podem escolher árvores diferentes.

A mais curta através do corte, não a mais próxima daqui 🖖

Prima Doze aldeias e acompanhe Kruskal passo a passo. O algoritmo percorre as 66 estradas possíveis da mais curta para a mais longa: K–L, com 13,89 km, é aceite de imediato; C–D e B–C são rejeitadas porque o caminho desenhado a vermelho já liga as respetivas extremidades. Mude para Prim, que faz crescer uma única rede a partir de A. As estradas surgem por outra ordem, K–L fica para o fim e as mesmas duas são rejeitadas. O resultado continua a ser as mesmas 11 estradas e os mesmos 199,04 km. Ambos obedecem à propriedade do corte: divida os pontos em dois grupos como quiser; se não houver duas estradas com o mesmo comprimento, a estrada mais curta entre os grupos pertence à árvore geradora mínima. Se a omitirmos, o caminho que a árvore oferece entre as suas extremidades terá de atravessar o corte por uma estrada mais longa. Substituir uma pela outra encurta a árvore. Em cada passo de Prim, a rede sombreada constitui um dos lados de um corte. Prima agora Vizinho mais próximo. Este método repete os passos de Prim com uma alteração: procura a partir da última aldeia alcançada, não a partir de toda a rede. No terceiro passo escolhe D–F, com 17,96 km, embora A–C atravesse o corte com apenas 17,67 km. Passa ao lado de A–C mais sete vezes e termina com mais 10,76%. Otakar Borůvka, o primeiro a resolver o problema, formulou-o em 1926 pensando na rede elétrica do sul da Morávia. Falou de pontos cujas “distâncias mútuas são diferentes”: é a mesma condição que impede Kruskal e Prim de chegarem a respostas distintas.

A rede mais curta não garante viagens curtas 🖖

Prima Um anel de cidades. Dez cidades rodeiam um lago, e a árvore segue a margem deixando de fora um troço: a abertura mais larga, entre J e A. Essas duas cidades ficam a 25,89 km em linha reta e a 128,30 km ao longo da árvore, uma distância 4,96 vezes maior, pois o único percurso entre elas atravessa a rede inteira. A linha roxa tracejada assinala este par; arraste qualquer cidade e será encontrado o novo maior desvio. Uma árvore geradora mínima reduz ao mínimo o comprimento total, mas nada garante quanto à distância entre cada par de cidades. Construir também a estrada de 25,89 km tornaria direta a viagem de A para J. Saber se a estrada adicional compensa é uma questão sobre percursos: o problema do caminho mais curto, desenvolvido na página dedicada ao algoritmo de Dijkstra.

Uma junção pode superar a árvore, mas não se conhece o limite 🖖

Prima Três cidades. Estão separadas por 40 km, portanto a árvore mede 80,00 km. Uma junção central, onde três estradas se encontram a 120°, liga-as com 69,28 km, menos 13,40%. Esta redução corresponde a 1 − √3/2. Prima Quatro cidades: quadrado e duas junções pouparão 8,93%. Regresse ao triângulo e arraste C para baixo, em direção a A e B: quando o ângulo em C ultrapassa 120°, a junção coincide com C e deixa de haver qualquer vantagem. Encontrar as melhores junções é o problema da árvore de Steiner. Em 1968, Edgar Gilbert e Henry Pollak conjecturaram que o triângulo equilátero representa o pior caso: para qualquer conjunto de pontos no plano, a árvore de Steiner não teria comprimento inferior a √3/2 do comprimento da árvore geradora mínima. Du e Hwang publicaram uma demonstração em 1990. Em 2010, Innami e três colegas apresentaram indícios de que um passo essencial dessa demonstração falha. Em 2012, Ivanov e Tuzhilin, que apontavam lacunas desde 2002, escreveram que a conjectura continuava em aberto. Uma coletânea de 2025 sobre problemas em aberto relativos a árvores de Steiner ainda a inclui. Não se sabe se alguma disposição de pontos permite poupar mais do que os 13,40% do triângulo.

Problema resolvido na íntegra

  1. Duas junções para um quadrado 4 passos

    Onde ficam as junções e qual é o comprimento da estrada? Prima Quatro cidades: quadrado: as cidades ocupam os vértices de um quadrado com 40 km de lado; uma árvore geradora mede 120,00 km, enquanto a rede com junções mede 109,28 km. Determine exatamente este comprimento e teste a primeira hipótese da maioria das pessoas: um X que passa pelo centro.

    Abrir este problema na ferramenta

    1. Numa rede mínima, as três estradas que chegam a uma junção formam ângulos de 120°. Se assim não fosse, os três vetores unitários orientados ao longo das estradas não teriam soma nula, e deslocar a junção na direção dessa soma reduziria o comprimento total.

    2. Coloque as duas junções na reta que atravessa o centro do quadrado. Cada uma serve os dois vértices mais próximos, e uma estrada central liga ambas. Cada ramal forma 120° com a estrada central, logo faz 60° com a reta que a contém. Como tem de percorrer transversalmente 20 km, metade do lado, o seu comprimento é 20/sen 60° e o avanço na direção da estrada é 20/tan 60°.

    3. Há quatro ramais; a estrada central ocupa o que resta dos 40 km depois dos avanços dos dois ramais.

    4. No X, quatro estradas ligam os vértices ao centro; cada uma mede metade da diagonal, ou seja, 20√2 km.

    Resposta

    40(1 + √3) = 109,28 km, com cada junção a 11,55 km do lado que serve; o X mede 113,14 km. O X é mais curto do que a árvore geradora, mas perde para a rede com junções, pois as suas estradas se encontram a 90°, não a 120°. Existem duas redes com exatamente este comprimento: a apresentada na página e a sua rotação de 90°. A poupança é 1 − (1 + √3)/3 = 8,93%, inferior aos 13,40% do triângulo.

Percurso de aprendizagem

Por que razão um algoritmo está correto

Referências (3)