Dada uma árvore, encontre um vértice que maximize a distância mínima a qualquer folha


7

Se me for dado um gráfico que forma uma árvore, estou interessado em encontrar um vértice que maximize a distância mínima a qualquer folha.

Estou certo de que esse problema já foi estudado antes. Alguém sabe o nome deste problema ou um algoritmo para resolvê-lo?


3
Você procuraria o centro gráfico ? Se você tem uma árvore, o centro é sempre um único vértice ou uma aresta. Pode ser encontrado em tempo linear.
Juho

3
@ Juho: note que a excentricidade em v é a maior distância de qualquer nó da v. O OP está perguntando sobre a distância mínima para uma folha, que geralmente será diferente. Portanto, não está claro que o centro do gráfico, lidando com vértices de excentricidade mínima, seja o conceito pertinente.
Niel de Beaudrap

@NieldeBeaudrap Sim, é verdade.
Juho #

Respostas:


5

Para encontrar um vértice de distância máxima de qualquer folha, você pode realizar uma pesquisa abrangente a partir de muitos pontos de partida, como as folhas. Como um BFS visita cada nó pelo caminho mais curto possível a partir da (s) fonte (s) da pesquisa, podemos atribuir facilmente a cada nó a distância até a folha mais próxima.

  • Inserir em uma fila uma coleção de pares (,0 0) para abrangendo todas as folhas e registrando max=0 0.

  • Repita o seguinte até que a fila esteja vazia:

    1. Estale um par (v,d)fora da fila. E sed=maxinserir v em uma coleção de elementos de distância máxima.

    2. Se houver nós adjacentes a v que não foram visitados, empurre um par (W,d+1 1) na fila para cada vizinho W, marcando-os como tendo sido visitados. Se houver algumW esvazie a coleção de elementos de distância máxima (se não estiver vazia) e defina max=d+1 1.

O resultado é uma coleção de nós que estão todos à distância pelo menos max de qualquer folha.

Deixei n=|V| (Observe que m=|E|=n-1 1) Supondo que possamos preencher a fila com as folhas da árvore a tempoO(n)examinando todos os nós do gráfico e que os vértices têm listas de adjacência de seus vizinhos, "atravessamos" cada aresta duas vezes para considerar os vizinhos de cada vértice; então esse algoritmo levaO(n+m)=O(n)Tempo. Também funciona para não-árvores, recuperando novamenteO(n+m) Tempo.


4

Realize a pesquisa da primeira largura de todas as folhas em paralelo, ou seja, visite todos os vizinhos de todas as folhas, seus respectivos vizinhos e assim por diante. O nó visitado por último é o seu vencedor.

Se você permitir que todas as pesquisas compartilhem a visitedbandeira, nenhum vértice será visitado duas vezes. Como temos uma árvore, todas as arestas são visitadas apenas uma vez. No total, obtemos tempo de execução linear (no número de nós).


Opa, você me venceu!
Niel de Beaudrap
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.