Algoritmo per trovare il diametro di un albero usando BFS / DFS. Perché funziona


28

Questo collegamento fornisce un algoritmo per trovare il diametro di un albero non orientato usando BFS / DFS . riassumendo:

Esegui BFS su qualsiasi nodo nel grafico, ricordando il nodo che hai scoperto per ultimo. Esegui BFS da te ricordando il nodo v scoperto per ultimo. d (u, v) è il diametro dell'albero.

Perché funziona

La pagina 2 di questo fornisce un ragionamento, ma è confuso. Sto citando la parte iniziale della prova:

Esegui BFS su qualsiasi nodo nel grafico, ricordando il nodo che hai scoperto per ultimo. Esegui BFS da te ricordando il nodo v scoperto per ultimo. d (u, v) è il diametro dell'albero.

Correttezza: Sia aeb un nodo qualsiasi tale che d (a, b) sia il diametro dell'albero. Esiste un percorso unico da a a b. Sia t il primo nodo su quel percorso scoperto da BFS. Se i percorsi p1 da s a u e p2 da a a b non condividono i bordi, il percorso da t a u include s. Così

d(t,u)d(s,u)

d(t,u)d(s,a)

.... (seguono altre disuguaglianze ..)

Le disuguaglianze non hanno senso per me.


Non trovo la citazione nella domanda collegata.
Raffaello

1
Prova a sostituire "non condividere i bordi" con "non condividere i vertici" nella soluzione.
Yuval Filmus,

Stai usando solo BFS, non DFS.
Miniatura

Risposte:


11

Tutte le parti della dimostrazione della rivendicazione dipendono da 2 proprietà cruciali degli alberi con bordi non orientati:

  • 1-connessione (cioè tra 2 nodi qualsiasi in un albero c'è esattamente un percorso)
  • qualsiasi nodo può fungere da radice dell'albero.

Scegli un nodo albero arbitrario . Supponiamo che u , v V ( G ) siano nodi con d ( u , v ) = d i a m ( G ) . Supponiamo inoltre che l'algoritmo trovi un nodo x che inizia prima da s , un certo nodo y che inizia da x successivo. wlog d ( s , u ) d ( s , v ) . nota chesu,vV(G)d(u,v)=diam(G)xsyxd(s,u)d(s,v) deve essere valido, a meno che il primo stadio dell'algoritmo non finisca con x . Vedremo che d ( x , y ) = d ( u , v ) .d(s,x)d(s,y)xd(x,y)=d(u,v)

La configurazione più generale di tutti i nodi coinvolti può essere vista nella seguente pseudo-grafica (possibilmente oppure s = z x y o entrambi):s=zuvs=zxy

(u)                                            (x)
  \                                            /
   \                                          /
    \                                        /
     ( z_uv )---------( s )----------( z_xy )
    /                                        \
   /                                          \
  /                                            \
(v)                                            (y)

lo sappiamo:

  1. . altrimenti d ( u , v ) < d i a m ( G ) in contraddizione con l'assunzione.d(zuv,y)d(zuv,v)d(u,v)<diam(G)
  2. . altrimenti d ( u , v ) < d i a m ( G ) in contraddizione con l'assunzione.d(zuv,x)d(zuv,u)d(u,v)<diam(G)
  3. , altrimenti la fase 1 dell'algoritmo non si sarebbe fermata su x .d(s,zxy)+d(zxy,x)d(s,zuv)+d(zuv,u)x
  4. , altrimenti la fase 2 dell'algoritmo non si sarebbe fermata su y .d(zxy,y)d(v,zuv)+d(zuv,zxy)y

1) e 2) implicano .d(u,v)=d(zuv,v)+d(zuv,u)d(zuv,x)+d(zuv,y)=d(x,y)+2d(zuv,zxy)d(x,y)

3) e 4) implicano d(zxy,y)+d(s,zxy)+d(zxy,x)d(s,zuv)+d(zuv,u)+d(v,zuv)+d(zuv,zxy) equivalente a .d(x,y)=d(zxy,y)+d(zxy,x)2d(s,zuv)+d(v,zuv)+d(u,zuv)d(u,v)

quindi .d(u,v)=d(x,y)

prove analogiche valgono per le configurazioni alternative

                 (u)                          (x)
                   \                          /
                    \                        /
                     \                      /
     ( s )---------( z_uv )----------( z_xy )
                     /                      \
                    /                        \
                   /                          \
                 (v)                          (y)

e

                          (x)        (u)  
                          /            \  
                         /              \ 
                        /                \
     ( s )---------( z_xy )----------( z_uv )
                        \                /          
                         \              /           
                          \            /            
                          (y)        (v)            

queste sono tutte le possibili configurazioni. in particolare, causa del risultato della fase 1 dell'algoritmo e y p a t h ( x , u ) , y p a t h ( x , v ) a causa della fase 2.xpath(s,u),xpath(s,v)ypath(x,u),ypath(x,v)


(1) Per quanto riguarda il primo grafico, il percorso da s a x non dovrebbe sempre contenere vertici u e v in un certo ordine poiché sono presenti sull'albero generato da BFS? (2) Potresti chiarire come si ottengono le disuguaglianze? (3) Poiché il BFS a partire da se quello che da x contiene u, v da qualche parte sul percorso, credo che l'immagine dovrebbe essere come mostrato nel link imgur.com/jQ94erY . Come si applicano i ragionamenti forniti qui?
curry

@curryage nota che l'albero è dato e non viene costruito dal bfs! risposte specifiche: annuncio 1) no. immagina un affinamento dell'albero nella grafica (1) aggiungendo arbitrariamente molti nodi sul bordo ed esattamente 1 nodo sul bordo ( z x y , x ) . il primo stadio bfs terminerà quindi con x. ad 2) quali disuguaglianze / i non sono chiare? supponiamo sempre che ( u , v ) sia un percorso della lunghezza del diametro del grafico d i a g ( G )(s,zxy)(zxy,x)(u,v)diag(G). questo è ben definito poiché G è 1-connesso. ad 3) no: 3.1 c'è più di 1 percorso tra 2 nodi a parte , quindi il grafico non è un albero. ...(s,y)
collapsar

@curryage ... 3.2 ; questo è impossibile come d ( u , v ) = d i a m ( G ) per ipotesi e il diametro di un grafico è la distanza minima massima tra due nodi qualsiasi. nel caso di un albero esiste esattamente 1 percorso tra 2 nodi qualsiasi, quindi la definizione si riduce a "distanza massima tra due nodi qualsiasi". d(x,y)>d(u,v)d(u,v)=diam(G)
collapsar

9

L'intuizione dietro è molto facile da capire. Supponiamo di dover trovare il percorso più lungo che esiste tra due nodi qualsiasi nella struttura ad albero.

Dopo aver disegnato alcuni diagrammi possiamo osservare che il percorso più lungo si verificherà sempre tra due nodi foglia (nodi con un solo bordo collegato). Ciò può anche essere dimostrato dalla contraddizione che se il percorso più lungo è tra due nodi e uno o entrambi i due nodi non è un nodo foglia, possiamo estendere il percorso per ottenere un percorso più lungo.

Quindi un modo è prima controllare quali nodi sono nodi foglia, quindi avviare BFS da uno dei nodi foglia per ottenere il nodo più lontano da esso.

Invece di prima trovare quali nodi sono nodi foglia, iniziamo BFS da un nodo casuale e quindi vediamo quale nodo è più lontano da esso. Lascia che il nodo più lontano sia x. È chiaro che x è un nodo foglia. Ora se iniziamo BFS da x e controlliamo il nodo più lontano da esso, avremo la nostra risposta.

Ma qual è la garanzia che x sarà il punto finale di un percorso massimo?

Vediamo da un esempio: -

       1   
    / /\ \
   6 2  4 8
         \ \
          5 9
           \
            7

Supponiamo di aver avviato il mio BFS da 6. Il nodo alla massima distanza da 6 è il nodo 7. Usando BFS possiamo ottenere questo nodo. Ora fissiamo BFS dal nodo 7 per ottenere il nodo 9 alla massima distanza. Il percorso dal nodo 7 al nodo 9 è chiaramente il percorso più lungo.

Cosa succederebbe se BFS che partisse dal nodo 6 fornisse 2 come nodo alla massima distanza? Quindi quando avremo BFS da 2 otterremo 7 come nodo alla massima distanza e il percorso più lungo sarà quindi 2-> 1-> 4-> 5-> 7 con lunghezza 4. Ma la lunghezza del percorso più lunga effettiva è 5. Questo non può accade perché BFS dal nodo 6 non assegnerà mai il nodo 2 come nodo alla massima distanza.

Spero che sia d'aiuto.


1
questa è una spiegazione semplice e chiara! grazie :)
anekix

4

Ecco una prova che segue più da vicino il set di soluzioni MIT collegato alla domanda originale. Per chiarezza, userò la stessa notazione che usano in modo che il confronto possa essere fatto più facilmente.

Supponiamo di avere due vertici e b tale che la distanza tra unaba e sul percorso p ( a , b ) è un diametro, ad esempio, la distanza d ( a , b ) è massima distanza possibile tra due punti nella struttura. Supponiamo di avere anche un nodo s a , b (se s = a , allora sarebbe ovvio che lo schema funziona, dal momento che il primo BFS otterrebbe b , e il secondo ritornerebbe a a). Supponiamo anche che abbiamo un nodobp(a,b)d(a,b)sa,bs=ab tale che d ( s , u ) = max x d ( s , x ) .ud(s,u)=maxxd(s,x)

Lemma 0: Sia che b sono nodi foglia.ab

Prova: se non fossero nodi fogliari, potremmo aumentare estendendo gli endpoint ai nodi fogliari, contraddicendo d ( a , b ) essendo un diametro.d(a,b)d(a,b)

Lemma 1: .max[d(s,a),d(s,b)]=d(s,u)

Prova: supponiamo per contraddizione che sia che d ( s , b ) fossero strettamente inferiori a d ( s , u ) . Esaminiamo due casi:d(s,a)d(s,b)d(s,u)

Caso 1: percorso fa non contengono vertice s . In questo caso, d ( a , b ) non può essere il diametro. Per capire perché, cerchiamo t essere il vertice unica su p ( a , b ) con la distanza minima di s . Quindi, vediamo che d ( a , u ) = d ( a , t ) + d ( t , sp(a,b)sd(a,b)tp(a,b)s , poiché d ( s , u ) > d ( s , b ) = d ( s , t ) + d ( t , b ) > d (d(a,u)=d(a,t)+d(t,s)+d(s,u)>d(a,b)=d(a,t)+d(t,b) . Allo stesso modo, avremmo anche d ( b , u ) > d ( a , b ) . Ciò contraddice d ( a , b ) essendo un diametro.d(s,u)>d(s,b)=d(s,t)+d(t,b)>d(t,b)d(B,u)>d(un',B)d(un',B)

Caso 2: il percorso contiene vertici s . In questo caso, d ( a , b ) di nuovo non può essere il diametro, poiché per alcuni vertici u tale che d ( s , u ) = max x d ( s , x ) , sia d ( a , u ) che d ( b , u ) sarebbe maggiore di dp(un',B)Sd(un',B) ud(S,u)=maxXd(S,X)d(un',u)d(B,u) .d(un',B)

Lemma 1 dà la ragione per cui iniziamo la seconda ampiezza ricerca dall'ultima-scoperto vertici dei primi BFS. Se sei il vertice unico con la massima distanza possibile dauu , allora per il Lemma 1, essodeveessere uno dei punti finali di qualche percorso con una distanza pari al diametro, e quindi una seconda BFS con u come radice trova ambiguità la diametro. D'altra parte, se esiste almeno un altro vertice v tale che d ( s , v ) = d ( s , u ) , allora sappiamo che il diametro è dSuvd(S,v)=d(S,u) , e non importa se si avvia la seconda BFS a u o v .d(un',B)=2d(S,u)uv


Eccezionale. Grazie per aver pubblicato questa risposta. Sono sorpreso che questa risposta non abbia ricevuto alcun voto.
Zefiro,

0

Prima esegui un DFS da un nodo casuale quindi il diametro di un albero è il percorso tra le foglie più profonde di un nodo nella sua sottostruttura DFS: inserisci qui la descrizione dell'immagine


4
Perché funziona?
Yuval Filmus,

0

Secondo la definizione di BFS, la distanza (dal nodo iniziale) di ciascun nodo esplorato è uguale alla distanza del nodo precedente esplorato o maggiore di 1. Pertanto, l'ultimo nodo esplorato da BFS sarà tra quelli più lontani dall'inizio nodo.

Xun'XXBun'un'


1
X

Non sono sicuro di come costruire una tale prova. Sento che il contrario è intuitivamente vero: se due nodi sono alla massima distanza l'uno dall'altro, quindi, per ogni dato nodo, uno dei due è alla massima distanza possibile da esso.
Extrarius,

vX=vun'=uBun'

Sì, ma questa domanda specifica alberi non orientati, che è il contesto in cui sto intuendo. Bloccare i cicli e i bordi diretti rende molti problemi grafici notevolmente più semplici da ragionare.
Extrarius,

0

Una cosa fondamentale da sapere è che un albero è sempre planare, il che significa che può essere disposto su un piano, quindi spesso il normale pensiero bidimensionale funziona. In questo caso, l'algoritmo dice che iniziare ovunque, andare il più lontano possibile. La distanza da quel punto a quanto è possibile allontanarsi da quel punto è la distanza più lunga dell'albero, e quindi il diametro.

Questo metodo funzionerebbe anche per trovare il diametro di un'isola reale, se lo definissimo il diametro del cerchio più piccolo che racchiuderebbe completamente l'isola.


0

@op, il modo in cui i casi sono definiti nel PDF potrebbe essere un po 'fuori.

Penso che i due casi dovrebbero essere:

  1. p1p2p1p2tp2S

  2. p1p2tp2p1 .

Il resto della prova nel PDF dovrebbe seguire.

Con questa definizione, la figura mostrata da OP rientra nel Caso 2.

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.