WYBRANE ZAGADNIENIA TEORII GRAFÓW wykład 6
Zliczanie drzew Problem:
Dane: V = {v1, . . . vn} zbiór skończony.
Pytanie: Ile jest drzew na zbiorze wierzchołków V ?
Def. Drzewem na zbiorze V nazywamy dowolne drzewo T = (V, E), gdzie E ⊆P2(V ).
Przykład. Niech |V | = n = 3. Łatwo sprawdzić, że są 3 drzewa na zbiorze V , każde izomorficzne z P3. Tw. Cayleya Dla każdego n 2 liczba drzew na zbiorze wierzchołkow V = [n] wynosi nn−2,
Wpierw udowodnimy twierdzenie pomocnicze:
Tw. Niech n 2 i d1, . . . , dn będą dodatnimi liczbami całkowitymi takimi, że Pni=1di = 2(n − 1).
Wówczas liczba drzew na zbiorze wierzchołków V = [n], o stopniach deg(i) = di dla i = 1, . . . , n wynosi:
(n − 2)!
(d1− 1)! · (d2− 1)! · . . . · (dn− 1)! = n − 2
d1− 1, d2− 1, . . . , dn− 1
!
.
Dowód: Oznaczmy tą liczbe drzew występującą w tezie twierdzenia przez t(d1, . . . , dn). Indukcja po n:
1. dla n = 2 d1 = d2 = 1 Jest 1 takie drzewo. 0,00= 1. Czyli zgadza się.
2. Załóżmy, że prawda dla liczb wierzchołków mniejszych od n. NiechPni=1di = 2n − 2. Wtexdy jedna (co najmniej) z tych liczb jest równa 1. Przyjmijmy, bez straty ogólności, że dn= 1 oraz wierzchołek n połaczony jest tylko z wierzhołkiem k. Usuńmy wierzchołek n (i krawędź nk). Otrzymane drzewo ma n − 1 wierzchołków oraz definiując:
d0j = dj dla j 6= k i j = 1, . . . , n − 1 oraz d0k = dk− 1 mamy
n−1
X
i=1
d0i = 2(n − 1) − 2.
Ponieważ k = 1, . . . , n − 1, to t(d1, . . . , dn) =
n−1
X
k=1
t(d01, . . . , d0n−1) = (z zał. ind.) =
n−1
X
k=1
(n − 1) − 2
d1− 1, . . . , dk−1− 1, dk− 2, dk+1− 1, . . . dn−1− 1
!
= n − 2
d1− 1, . . . , dn− 1
!
(ostatnia równość wynika z faktu, że d n
1,...dr
= Pri=1d n−1
1,...,di−1,di−1,di+1,...dr
, gdzie i ∈ {1, . . . r} numer typu pierwszego obiektu w n-elementowej permutacji z powtórzeniami).
Dowód Tw. Cayleya
(a1+ . . . + an)n−2= X
d1,...,dn1, (d1−1)+...(dn−1)=n−2
n − 2 d1− 1, . . . , dn− 1
!
· ad11−1· . . . · adnn−1.
Dla a1 = . . . = an= 1 otrzymujemy:
nn−2= (1 + . . . + 1)n−2 = X
d1,...,dn1, (d1−1)+...(dn−1)=n−2
n − 2 d1− 1, . . . , dn− 1
!
.
Praca domowa:
1. Wykaż, że grafów na zbiorze wierzchołków V = [n] jest 2(n2) (1 pkt).
2. Wykaż, że grafów na zbiorze wierzchołków V = [n] i dokładnie m krawędziach jest(n2)
m
(1 pkt).
Kod Pr¨ufera
Służy do zakodowania drzew na zbiorze wierzchołków [n] jako ciągów długości n − 2 o elementach ze bioru [n].
Algorytm kodowania:
Dane: drzewo T o zbiorze wierzchołków [n].
1. Znajdź najmniejszy wierzchołek o stopniu 1, powiedzmy u. Niech w będzie jedynym wierzchołkiem połączonym z u
2. Zapisz w oraz usuń u (wraz z krawędzią uw).
3. Jeżeli w drzewie pozostało więcej niż jedna krawędź, to IDŻ do 1. W przeciwnym przypadku STOP.
Uwaga: Każdy wierzchołek v występuje w kodzie Pr¨ufera deg(v) − 1 razy.
Przykład:
V = {1, 2, 3, 4, 5, 6}, E = {12, 26, 23, 34, 35}.
1. Usuwamy 1, zapisujemy 2.
2. Usuwamy 4, zapisujemy 3.
3. Usuwamy 5, zapisujemy 3.
4. Usuwamy 3, zapisujemy 2.
Otrzymujemy ciąg (2, 3, 3, 2).
Tw. Każdy ciąg n − 2 liczb wybranych w dowolny sposób ze zbioru [n] jest kodem Pr¨ufera jednego drzewa na zbiorze wierzchołków [n].
Algorytm rekonstrukcji drzewa o danym kodzie Pr¨ufera:
Dane: ciąg (a1, . . . , an−2) o elementach ze zbioru [n].
1. Zapisz listy:
L := (a1, . . . , an−2), N := (1, 2, . . . , n).
Niech V := [n], E := ∅.
2. Wyznacz z listy N najmniejszą liczbę (powiedzmy i), której nie ma na liście L. Usuń pierwszy element z listy L (powiedzmy j). Usuń i z listy N . E = E ∪ {ij}.
3. Czy L 6= ∅ ?
Jeśli TAK, to idź do 1.
Jeśli NIE, to jeśli N = (k, l), to E = E ∪ {kl} i STOP.
Przykład:
Znajdź drzewo o kodzie Pr¨ufera (2, 3, 3, 2).
1. L = (2, 3, 3, 2), N = (1, 2, 3, 4, 5, 6). Dodajemy krawędź 12. Usuwamy 2 z L i 1 z N . 2. L = (3, 3, 2), N = (2, 3, 4, 5, 6). Dodajemy krawędź 34.
3. L = (3, 2), N = (2, 3, 5, 6). Dodajemy krawędź 35.
4. L = (2), N = (2, 3, 6). Dodajemy krawędż 23.
5. L = ∅, N = (2, 6). Doddajemy krawędź 26.
Otrzymaliśmy drzewo z poprzedniego przykładu.