Correção do algoritmo de componentes fortemente conectados para um gráfico direcionado


8

Eu tenho lido sobre o algoritmo para encontrar os componentes fortemente conectados em um gráfico direcionado . Considera procurar dois DFS eo segundo passo é transpor o gráfico original .G=(V,E)GT

O algoritmo é o seguinte:

  1. Execute o DFS no (iniciando em um vértice inicial arbitrário), acompanhando os tempos de acabamento de todos os vértices.G
  2. Calcular a transposição,
  3. Execute o DFS em , iniciando no vértice com o último tempo de acabamento, formando uma árvore enraizada nesse vértice. Quando uma árvore estiver concluída, vá para o vértice não visitado com o próximo horário de término mais recente e forme outra árvore usando o DFS e repita até que todos os vértices em G ^ T sejam visitados.GTGT
  4. Saída dos vértices em cada árvore formada pelo segundo DFS como um componente fortemente conectado separado.

Minha pergunta é :

  1. Qual é a intuição por trás desse passo intermediário da computação de uma transposição?

Respostas:


10

A transposição da matriz de adjecência nãoUMA

UMA[Eu,j]=1UMAT[j,Eu]=1 .

Em termos de gráficos, isso significa

vocêGvvGTvocê .

Em outras palavras, a transposição inverte a direção de todas as arestas. Note-se que tem os mesmos componentes fortes como .GTG

O algoritmo que você está vendo é o algoritmo de Kosaraju . Tenha cuidado com sua noção de "hora de término": não é a hora em que o nó é visitado, mas quando a pesquisa percorre o subgráfico acessível a partir dele. A Wikipedia propõe usar uma pilha para gerenciar isso, o que eu acho que é uma boa ideia.

Por que é correto usar o , intuitivamente? Suponha que é o primeiro nó de seu componente forte visitado pelo DFS.GTx

  • O DFS em percorre todo o componente forte de depois de atingir , além de outros através de arestas que saem do componente.Gxx
  • Como usamos uma ordem de pilha para lembrar a ordem dos nós, também é o primeiro nó do seu componente forte visitado (como nó inicial, até) na segunda fase.x
  • Como e têm os mesmos componentes fortes, todos os nós no componente forte de são visitados ao pesquisar em . As arestas que deixam o componente na primeira fase apontam na direção errada em e, portanto, não são seguidas. Todas as arestas que deixam o componente de em já foram removidas devido à ordem da pilha.GGTxGTxGTxGT

2

Meu entendimento:

Quando você executa o DFS em qualquer gráfico DAG acompanhando os tempos de acabamento, a única coisa que você pode garantir é que o nó coletor nunca terá o maior tempo de acabamento [1] . Mas, ao mesmo tempo, o menor tempo de acabamento pode aparecer em qualquer componente do gráfico . Portanto, torna o menor tempo de acabamento meio inútil.

Basicamente, o fato [1] também é inútil no gráfico original , mas é muito útil no gráfico transposto . Quando você transpõe, essa declaração leva ao seguinte:

No gráfico transposto, o nó que era um coletor no gráfico não transposto sempre obterá o tempo de acabamento mais alto .

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.