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





}