Correttezza dell'algoritmo dei componenti fortemente connessi per un grafico diretto


8

Ho letto l'algoritmo per trovare i componenti fortemente connessi in un grafico diretto G=(V,E). Considera due ricerche DFS e il secondo passaggio sta trasponendo il grafico originaleGT.

L'algoritmo è il seguente:

  1. Eseguire DFS su G (a partire da un vertice di partenza arbitrario), tenendo traccia dei tempi di fi nitura di tutti i vertici.
  2. Calcola la trasposizione,
  3. Eseguire DFS su GT, iniziando dal vertice con l'ultimo tempo di fi nitura, formando un albero radicato in quel vertice. Una volta completato un albero, passa al vertice non visitato con il tempo di fi nitura più recente successivo e forma un altro albero usando DFS e ripeti fino a quando tutti i vertici inGT sono visitati.
  4. Emette i vertici in ciascun albero formato dal secondo DFS come componente separato fortemente connesso.

La mia domanda è :

  1. Qual è l'intuizione dietro questo passaggio intermedio del calcolo di una trasposizione?

Risposte:


10

Trasposizione della matrice di regolazione A fa

A[i,j]=1AT[j,i]=1.

In termini di grafici, ciò significa

uGvvGTu.

In altre parole, la trasposizione inverte la direzione di tutti i bordi. Nota cheGT ha gli stessi componenti forti di G.

L'algoritmo che stai guardando è l' algoritmo di Kosaraju . Siate cauti con la vostra nozione di "tempo di fine": non è il momento in cui il nodo viene visitato, ma quando la ricerca ha attraversato il sottografo raggiungibile da esso. Wikipedia propone di utilizzare uno stack per gestire questo, che penso sia una buona idea.

Perché è corretto da usare GT, intuitivamente? Assumerex è il primo nodo del suo componente forte visitato dal DFS.

  • Il DFS attivo G attraversa l'intera componente forte di x dopo aver raggiunto x, oltre ad alcuni altri tramite bordi che lasciano il componente.
  • Poiché utilizziamo un ordine stack per ricordare l'ordine dei nodi, x è anche il primo nodo del suo componente forte visitato (come nodo iniziale, anche) nella seconda fase.
  • Da G e GT hanno gli stessi componenti forti, tutti i nodi nel componente forte di x vengono visitati durante la ricerca GT a partire dal x. Quei bordi che lasciano il componente nel primo punto puntano nella direzione sbagliata dentroGTe quindi non sono seguiti. Tutti i bordi lasciano il componente dix in GT sono già stati rimossi a causa dell'ordine dello stack.

2

La mia comprensione:

Quando esegui DFS su qualsiasi grafico DAG tenendo traccia dei tempi di finitura, l' unica cosa che puoi garantire è che il nodo sink non otterrà mai il tempo di finitura più elevato [1] . Allo stesso tempo, il tempo di finitura più basso può apparire in qualsiasi componente del grafico . Quindi, rende inutile il tempo di finitura più basso.

Fondamentalmente, il fatto [1] è inutile anche nel grafico originale , ma è molto utile nel grafico trasposto . Quando trasponi, questa affermazione porta a quanto segue:

Nel grafico trasposto, il nodo che era un sink nel grafico non trasposto otterrà sempre il tempo di finitura più elevato .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.