Algorytm znajdowania średnicy drzewa za pomocą BFS / DFS. Dlaczego to działa?


28

To łącze zapewnia algorytm znajdowania średnicy drzewa bezkierunkowego za pomocą BFS / DFS . Zreasumowanie:

Uruchom BFS na dowolnym węźle na wykresie, pamiętając węzeł wykryty jako ostatni. Uruchom BFS, pamiętając ostatnio wykryty węzeł v. d (u, v) to średnica drzewa.

Dlaczego to działa?

Strona 2 tego zawiera uzasadnienie, ale jest mylące. Cytuję początkową część dowodu:

Uruchom BFS na dowolnym węźle na wykresie, pamiętając węzeł wykryty jako ostatni. Uruchom BFS, pamiętając ostatnio wykryty węzeł v. d (u, v) to średnica drzewa.

Prawidłowość: Niech a i b będą dowolnymi dwoma węzłami, tak aby d (a, b) była średnicą drzewa. Istnieje unikalna ścieżka od a do b. Niech będzie pierwszym węzłem na ścieżce odkrytej przez BFS. Jeśli ścieżki od s do u oraz od a do b nie dzielą krawędzi, wówczas ścieżka od t do u zawiera s. Więcp1p2

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

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

.... (kolejne nierówności następują ..)

Nierówności nie mają dla mnie sensu.


Nie znajduję cytatu w połączonym pytaniu.
Raphael

1
Spróbuj zamienić w rozwiązaniu „nie udostępniaj krawędzi” na „nie udostępniaj wierzchołków”.
Yuval Filmus

Używasz tylko BFS, a nie DFS.
Miniatura

Odpowiedzi:


11

Wszystkie części dowodu roszczenia zależą od 2 kluczowych właściwości drzew o nieukierunkowanych krawędziach:

  • 1-połączenie (tj. Między dowolnymi 2 węzłami w drzewie istnieje dokładnie jedna ścieżka)
  • dowolny węzeł może służyć jako korzeń drzewa.

Wybierz dowolne węzła drzewa . Załóżmy , że u , v V ( G ) są węzłami z d ( u , v ) = d i a m ( G ) . Załóżmy ponadto, że algorytm znajduje najpierw węzeł x zaczynający się od s , a następnie jakiś węzeł y zaczynający się od x . wlog d ( s , u ) d ( s , v ) . zauważ tosu,vV(G)d(u,v)=diam(G)xsyxd(s,u)d(s,v) muszą zostać zachowane, chyba że pierwszy stopień algorytmu nie skończy się na x . Zobaczymy, że d ( x , y ) = d ( u , v ) .d(s,x)d(s,y)xd(x,y)=d(u,v)

Najbardziej ogólną konfigurację wszystkich zaangażowanych węzłów można zobaczyć w następującej pseudo-grafice (prawdopodobnie lub s = z x y lub obu):s=zuvs=zxy

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

wiemy to:

  1. . w przeciwnym razie d ( u , v ) < d i a m ( G ) zaprzecza założeniu.d(zuv,y)d(zuv,v)d(u,v)<diam(G)
  2. . w przeciwnym razie d ( u , v ) < d i a m ( G ) zaprzecza założeniu.d(zuv,x)d(zuv,u)d(u,v)<diam(G)
  3. , w przeciwnym razie etap 1 algorytmu nie zatrzymałby się na x .d(s,zxy)+d(zxy,x)d(s,zuv)+d(zuv,u)x
  4. , w przeciwnym razie etap 2 algorytmu nie zatrzymałby się na y .d(zxy,y)d(v,zuv)+d(zuv,zxy)y

1) i 2) implikować .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) i 4) sugerują d(zxy,y)+d(s,zxy)+d(zxy,x)d(s,zuv)+d(zuv,u)+d(v,zuv)+d(zuv,zxy) równoważny .d(x,y)=d(zxy,y)+d(zxy,x)2d(s,zuv)+d(v,zuv)+d(u,zuv)d(u,v)

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

proofy analogowe obowiązują dla alternatywnych konfiguracji

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

i

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

są to wszystkie możliwe konfiguracje. w szczególności ze względu na wynik etapu 1 algorytmu oraz y p a t h ( x , u ) , y p a t h ( x , v ) ze względu na etap 2.xpath(s,u),xpath(s,v)ypath(x,u),ypath(x,v)


(1) Jeśli chodzi o pierwszą grafikę, czy ścieżka od s do x nie powinna zawsze zawierać wierzchołków u i v w jakiejś kolejności, ponieważ są one obecne na drzewie wygenerowanym przez BFS? (2) Czy możesz wyjaśnić, w jaki sposób uzyskuje się nierówności? (3) Ponieważ BFS zaczynający się od si, a zaczynający od x zawierają u, v gdzieś na ścieżce, uważam, że grafika powinna być taka, jak pokazano w linku imgur.com/jQ94erY . W jaki sposób zastosowane tutaj rozumowanie?
curryage

@ curryage zauważ, że drzewo jest dane i nie jest budowane przez bfs! konkretne odpowiedzi: reklama 1) nr. wyobraź sobie udoskonalenie drzewa w grafice (1) poprzez dodanie dowolnie wielu węzłów na krawędzi i dokładnie 1 węzeł na krawędzi ( z x y , x ) . pierwszy etap bfs kończy się wtedy na x. ad 2) które nierówności są niejasne? zawsze zakładamy, że ( u , v ) będzie ścieżką o długości średnicy wykresu d i a g ( G )(s,zxy)(zxy,x)(u,v)diag(G). jest to dobrze zdefiniowane, ponieważ G jest połączone 1. ad 3) no: 3.1 istnieje więcej niż 1 ścieżka między dowolnymi 2 węzłami oprócz , więc wykres nie jest drzewem. ...(s,y)
Collapsar

@ curryage ... 3.2 ; jest to niemożliwe, ponieważ d ( u , v ) = d i a m ( G ) z założenia, a średnica wykresu to maksymalna minimalna odległość między dowolnymi dwoma węzłami. w przypadku drzewa istnieje dokładnie 1 ścieżka między dowolnymi 2 węzłami, więc definicja ogranicza się do „maksymalnej odległości między dowolnymi dwoma węzłami”. d(x,y)>d(u,v)d(u,v)=diam(G)
Collapsar

9

Intuicja jest bardzo łatwa do zrozumienia. Załóżmy, że muszę znaleźć najdłuższą ścieżkę, która istnieje między dowolnymi dwoma węzłami w danym drzewie.

Po narysowaniu niektórych diagramów możemy zaobserwować, że najdłuższa ścieżka zawsze będzie występować między dwoma węzłami liścia (węzły połączone tylko jedną krawędzią). Można to również udowodnić przez sprzeczność, że jeśli najdłuższa ścieżka znajduje się między dwoma węzłami i jeden lub oba z dwóch węzłów nie jest węzłem liścia, wówczas możemy przedłużyć ścieżkę, aby uzyskać dłuższą ścieżkę.

Jednym ze sposobów jest sprawdzenie, które węzły są węzłami liścia, a następnie uruchomienie BFS z jednego z węzłów liścia, aby uzyskać węzeł najdalej od niego.

Zamiast najpierw dowiedzieć się, które węzły są węzłami liścia, uruchamiamy BFS z losowego węzła, a następnie sprawdzamy, który węzeł jest najdalej od niego. Niech węzłem najdalej będzie x. Oczywiste jest, że x jest węzłem liścia. Teraz, jeśli uruchomimy BFS od x i sprawdzimy od niego najdalszy węzeł, otrzymamy naszą odpowiedź.

Ale jaka jest gwarancja, że ​​x będzie końcowym punktem maksymalnej ścieżki?

Zobaczmy na przykładzie: -

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

Załóżmy, że uruchomiłem mój BFS od 6. Węzłem w maksymalnej odległości od 6 jest węzeł 7. Za pomocą BFS możemy uzyskać ten węzeł. Teraz zaczynamy BFS od węzła 7, aby uzyskać węzeł 9 w maksymalnej odległości. Ścieżka od węzła 7 do węzła 9 jest wyraźnie najdłuższą ścieżką.

Co jeśli BFS, który rozpoczął się od węzła 6, dał 2 jako węzeł w maksymalnej odległości. Następnie, gdy będziemy BFS od 2, otrzymamy 7 jako węzeł w maksymalnej odległości, a najdłuższa ścieżka będzie wtedy 2-> 1-> 4-> 5-> 7 o długości 4. Ale rzeczywista najdłuższa długość ścieżki wynosi 5. Nie można dzieje się tak, ponieważ BFS z węzła 6 nigdy nie da węzła 2 jako węzła w maksymalnej odległości.

Mam nadzieję, że to pomaga.


1
to proste i jasne wyjaśnienie! dzięki :)
anekix

4

Oto dowód, który jest zgodny z zestawem rozwiązań MIT powiązanym z pierwotnym pytaniem. Dla jasności użyję tego samego zapisu, którego używają, aby łatwiej było dokonać porównania.

Załóżmy, że mamy dwa wierzchołki oraz b tak, że odległość pomiędzy i B na ścieżce P ( , b ) ma średnicę, na przykład na odległość d ( , b ) jest maksymalna odległość między dwoma punktami w drzewie. Załóżmy, że mamy również węzeł s a , b (jeśli s = a , to byłoby oczywiste, że schemat działa, ponieważ pierwszy BFS otrzyma b , a drugi wróci do a). Załóżmy również, że mamy węzełababp(a,b)d(a,b)sa,bs=ab taki, że d ( s , u ) = max x d ( s , x ) .ud(s,u)=maxxd(s,x)

Lemat 0: Zarówno i b są węzłami liści.ab

Dowód: gdyby nie były węzłami liścia, moglibyśmy zwiększyć poprzez rozszerzenie punktów końcowych na węzły liścia, przeciwstawiając się d ( a , b ) jako średnicy.d(a,b)d(a,b)

max[d(s,a),d(s,b)]=d(s,u)

d(s,a)d(s,b)d(s,u)

p(a,b)sd(a,b)tp(a,b)sd(a,u)=d(a,t)+d(t,s)+d(s,u)>d(a,b)=d(a,t)+d(t,b)d(s,u)>d(s,b)=d(s,t)+d(t,b)>d(t,b)d(b,u)>d(a,b)d(a,b)

p(a,b)sd(a,b) ud(s,u)=maxxd(s,x)d(a,u)d(b,u)d(a,b)

uusuvd(s,v)=d(s,u)d(a,b)=2d(s,u)uv


Niesamowite. Dziękujemy za opublikowanie tej odpowiedzi. Dziwi mnie, że ta odpowiedź nie otrzymała żadnych pozytywnych opinii.
Zephyr

0

Najpierw uruchom DFS z losowego węzła, a następnie średnica drzewa jest ścieżką między najgłębszymi liśćmi węzła w jego poddrzewie: wprowadź opis zdjęcia tutaj


4
Dlaczego to działa?
Yuval Filmus

0

Zgodnie z definicją BFS odległość (od węzła początkowego) każdego eksplorowanego węzła jest albo równa odległości poprzedniego badanego węzła, albo większa o 1. Zatem ostatni węzeł badany przez BFS będzie jednym z najdalszych od początku węzeł.

xaxxbaa


1
x

Nie jestem pewien, jak skonstruować taki dowód. Wydaje mi się, że odwrotność jest intuicyjnie prawdziwa: jeśli dwa węzły znajdują się w maksymalnej odległości od siebie, to dla dowolnego węzła jeden z dwóch jest w największej możliwej odległości od niego.
Extrarius

vx=va=uba

Tak, ale to pytanie określa drzewa bezkierunkowe, w którym intuicyjnie się czuję. Cykle blokowania i ukierunkowane krawędzie znacznie ułatwiają rozumowanie wielu problemów graficznych.
Extrarius

0

Jedną z kluczowych rzeczy, o których należy wiedzieć, jest to, że drzewo jest zawsze płaskie, co oznacza, że ​​można je ułożyć na płaszczyźnie, dlatego często działa zwykłe myślenie dwuwymiarowe. W takim przypadku algorytm mówi, że należy rozpocząć od dowolnego miejsca, a następnie odejść jak najdalej. Odległość od tego punktu do możliwie największej odległości od tego punktu to największa odległość w drzewie, a zatem średnica.

Ta metoda działałaby również w celu znalezienia średnicy prawdziwej, fizycznej wyspy, gdybyśmy zdefiniowali ją jako średnicę najmniejszego okręgu, który całkowicie otaczałby wyspę.


0

@op, sposób definiowania przypadków w pliku PDF może być nieco wyłączony.

Myślę, że te dwa przypadki powinny być:

  1. p1p2p1p2tp2s

  2. p1p2tp2p1

Reszta dowodu w pliku PDF powinna nastąpić.

Przy tej definicji liczba pokazana przez OP mieści się w przypadku 2.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.