Algorytmiczna teoria grafów, wykªad drugi Drzewa rozpinaj¡ce
Transkrypt
Algorytmiczna teoria grafów, wykªad drugi Drzewa rozpinaj¡ce
Algorytmiczna teoria grafów, wykªad drugi Drzewa rozpinaj¡ce spisaª Zbigniew Skowron 27 lutego 2008 1 1 Reprezentacje grafów Oznaczenia: G = (V, E), V = {v1 , . . . , vn }, |E| = m. Macierz s¡siedztwa: A [n × n] = [aij ] ( 1 0 aij = dla vi vj ∈ E wpw. Koszt pami¦ciowy: O(n2 ) (ew. O(n2 / log n) przy kodowaniu binarnym) Listy s¡siedztwa: L [1 . . . n] L [i] - lista s¡siedztwa wierzchoªka vi Koszt pami¦ciowy: O(n + m) (czyli liniowy wzgl¦dem rozmiaru grafu) Macierz incydencji: I [n × m] = [iij ] ( iij = gdy vi jest incydentny z ej wpw. 1 0 Koszt pami¦ciowy: O(nm) 2 Zliczanie drzew rozpinaj¡cych Dane: G = (V, E), Pytanie: Ile jest drzew rozpinaj¡cych w G? Mo»na próbowa¢ generowa¢ wszystkie drzewa rozpinaj¡ce (np. generowa¢ wszystkie n − 1 elementowe podzbiory kraw¦dzi i sprawdza¢, czy tworz¡ drzewo rozpinaj¡ce). Czas byªby wykªadniczy. My policzymy drzewa rozpinaj¡ce w czasie wielomianowym. D(G) L(G) = D(G) − A(G) macierz stopni (macierz diagonalna, na przek¡tnej stopnie wierzchoªków) laplasjan grafu G Orientujemy kraw¦dzie tego grafu: 1 G(V, E) Q(G) dowolna orientacja −→ ~ G(V, E) ~ macierz incydencji grafu G qij 1 −1 = 0 gdy ej wchodzi do vi gdy ej wychodzi z vi wpw. (powi¡zanie L i Q) Dla dowolnej orientacji G: L(G) = Q(G) · Q(G)T G = (V, E), Lemat: Dowód: 1. Na przek¡tnej macierzy wynikowej dostajemy sum¦ wyrazów 12 oraz (−1)2 jeden wyraz dla jednej kraw¦dzi, czyli w sumie stopie« danego wierzchoªka. 2. Gdy i 6= j : Je±li nie ma kraw¦dzi pomi¦dzy vi a vj , to dostaniemy 0. Je±li jest kraw¦d¹ pomi¦dzy vi a vj , to dostaniemy iloczyn 1 i −1 (kraw¦d¹ wchodzi do jednego wierzchoªka, a wychodzi z drugiego), czyli −1. Oznaczenia: M macierz n × m S ⊆ {1, . . . , m}, |S| = n Zakªadamy bez straty ogólno±ci, »e n ≤ m MS N NS Bi macierz n × m Macierz M z kolumnami o indeksach z S macierz m × n macierz n × n Macierz N z wierszami o indeksach z S macierz B po usuni¦ciu i-tego wiersza i i-tej kolumny (CauchyBinet) M macierz n × m, N macierz m × n Twierdzenie: 2 Teza: det(M · N ) = det(MS ) · det(N S ) X S⊆{1,...,m} |S|=n Kirchoa o macierzach i drzewach (matrix-tree G = (V, E) L = L(G) laplasjan grafu G Twierdzenie: theorem ) Teza: Liczba drzew rozpinaj¡cych G wynosi det(Li ) dla dowolnego i ∈ {1, . . . , n}. Dowód: Q macierz incydencji dla dowolnej orientacji grafu G L = Q · QT Li = Q 0 · Q 0 T Q0 macierz Q z usuni¦tym i-tym wierszem Suma po wszystkich n − 1 elementowych podzbiorach kraw¦dzi: det(Li ) = X S⊆{1,...,m} T det(Q0S ) · det(Q0 S ) | {z det2 (Q0S ) } |S|=n • Zaªó»my, »e (V, S) nie jest drzewem rozpinaj¡cym to znaczy, »e musi by¢ cykl w (V, S). We¹my jaki± cykl: Na rysunku mamy kraw¦dzie skierowane dowoln¡ orientacj¡. Ka»da kraw¦d¹ odpowiada jednej kolumnie w zmodykowanej macierzy incydencji Q0S . 3 Szukamy liniowo zale»nego podzbioru kolumn macierzy Q0S . Dla ka»dej kolumny z poza cyklu bierzemy wspóªczynnik 0. Przechodzimy po cyklu i nadajemy kraw¦dzi wspóªczynnik 1 gdy kraw¦d¹ jest skierowana zgodnie z kierunkiem przechodzenia, a −1 wpw. Mamy 4 przypadki: Liczby ponad kraw¦dziami daj¡ nam kombinacj¦ liniow¡ kolumn macierzy QS (odpowiadaj¡cym tym kraw¦dziom) równ¡ ~0, a wi¦c i det(QS ) = 0. • Zaªó»my, »e (V, S) daje drzewo rozpinaj¡ce. Wobec tego w (V, S) istniej¡ ≥ 2 wierzchoªki o stopniu 1. Niech l1 b¦dzie takim wierzchoªkiem, ró»nym od vi (Li nie zawiera wiersza odpowiadaj¡cego wierzchoªkowi vi ). Permutujemy wiersze i kolumny Q0S tak, aby pierwszym wierszem byªo l1 , a pierwsza kolumna odpowiadaªa kraw¦dzi incydentnej z l1 : Q0S −→ P1 Nast¦pnie usuwamy wierzchoªek l1 z grafu: Podobnie robimy dalej: P1 −→ P2 −→ P3 −→ . . . 4 Wyznacznik powstaªej macierzy jest równy ±1. Zatem det(QS ) jest równy 0 gdy zbiór kraw¦dzi S nie jest drzewem rozpinaj¡cym i 1 gdy nim jest. Poniewa»: det2 (Q0S ) X det(Li ) = S⊆{1,...,m} |S|=n to teza jest prawdziwa: Liczba drzew rozpinaj¡cych G wynosi det(Li ) dla dowolnego i ∈ {1, . . . , n}. 2 Wniosek: Liczba drzew rozpinaj¡cych klik¦ Kn jest równa nn−2 : Li = n -1 n .. -1 n−1 det(Li ) = nn−2 5 . n {z | n−1 }