Matematyka dyskretna 1/Wykład 8: Funkcje tworzące w zliczaniu obiektów kombinatorycznych

Z Studia Informatyczne
Wersja z dnia 12:02, 21 sie 2006 autorstwa Pitab (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Obiekty kombinatoryczne często są zadane w sposób rekurencyjny. Tak zadawaliśmy np. drzewa binarne. Nawet, gdy obiekty nie są zadane w sposób rekurencyjny, to ich liczba (uzależniona np. od rozmiaru lub innego parametru) spełnia pewne zależności rekurencyjne. Często rozwikłanie takich zależności i wyprowadzenie wzoru na postać zwartą jest skomplikowane. W tym wykładzie zobaczymy jak w wielu przypadkach funkcje tworzące mogą być pomocne w zliczaniu różnych obiektów kombinatorycznych.

Zliczanie drzew

Drzewo binarne to dowolny obiekt powstały zgodnie z regułami:

  • jest drzewem binarnym,
  • jeśli T0 i T1 są drzewami binarnymi to T0T1 też jest drzewem binarnym.

Węzeł wewnętrzny drzewa binarnego jest zdefiniowany rekurencyjnie:

  • drzewo nie ma węzłów wewnętrznych,
  • węzłami wewnętrznymi drzewa T0T1 są wszystkie węzły wewnętrzne drzew T0 i T1 a także nowy węzeł łączący drzewa T0 i T1.

Liczba Catalana cn to liczba drzew binarnych o n węzłach wewnętrznych.

Przykład

Drzewa binarne są modelem dla tzw. wyrażeń nawiasowych, czyli termów z jednym działaniem binarnym i jedną zmienną x. Wyrażenia takie są zdefiniowane poprzez:

  • zmienna x jest wyrażeniem nawiasowym,
  • jeśli t0 i t1 są wyrażeniami nawiasowymi, to (t0t1) też jest wyrażeniem nawiasowym.
Węzły wewnętrzne wyrażenia nawiasowego, to podtermy nie będące zmiennymi.

rysunek 1:Wszystkie pełne drzewa binarne o 3 węzłach wewnętrznych.(rys z pliku:genfunc_catalan.eps)

Obserwacja 8.1

Liczby Catalana cn spełniają zależność rekurencyjną:


{c0=1,cn=c0cn1+c1cn2++cn1c0,dla n1.


Dowód

Pojedynczy wierzchołek jest jedynym pełnym drzewem binarnym bez węzłów wewnętrznych, a więc c0=1. Każde drzewo o co najmniej jednym wierzchołku wewnętrznym rozkłada się jako TlTr, dla pewnych jednoznacznie wyznaczonych poddrzew Tl,Tr. Poddrzewo Tl nazywamy lewym, a Tr prawym podrzewem drzewa TlTr.

Niech teraz

  • Parser nie mógł rozpoznać (nieznana funkcja „\rodzina”): {\displaystyle \rodzina{T}_n} będzie rodziną wszystkich drzew binarnych

o n węzłach wewnętrznych, oraz

  • Parser nie mógł rozpoznać (nieznana funkcja „\rodzina”): {\displaystyle \rodzina{T}_{n_l,n_r}} będzie rodziną wszystkich drzew,

których lewe i prawe poddrzewo mają odpowiednio nl oraz nr węzłów wewnętrznych.

Zachodzi więc:


Parser nie mógł rozpoznać (nieznana funkcja „\rodzina”): {\displaystyle \left\vert\rodzina{T}_{n_l,n_r}\right\vert=\left\vert\rodzina{T}_{n_l}\times\rodzina{T}_{n_r}\right\vert=\left\vert\rodzina{T}_{n_l}\right\vert\cdot\left\vert\rodzina{T}_{n_r}\right\vert=c_{n_l}\cdot c_{n_r}. }

rysunek 2:Drzewo T posiadające lewe poddrzewo T_l oraz prawe poddrzewo Tr(rysunek z pliku:genfunc_drzewo.eps)

Ponadto, jeśli drzewo o n wierzchołkach wewnętrznych posiada lewe poddrzewo o nl wierzchołkach wewnętrznych oraz prawe poddrzewo o nr węzłów wewnętrznych to n=nl+nr+1. Zatem rodzina wszystkich drzew o n wewnętrznych wierzchołkach rozbija się na rozłączną sumę


Parser nie mógł rozpoznać (nieznana funkcja „\rodzina”): {\displaystyle \rodzina{T}_n=\rodzina{T}_{0,n-1}\cup\rodzina{T}_{1,n-2}\cup\ldots\cup \rodzina{T}_{n-1,0}. }


W konsekwencji otrzymujemy:


cn=c0cn1+c1cn2++cn1c0.


Wniosek 8.2

Funkcja tworząca Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{C}(x)=c_0+c_1x+c_2x^2+\ldots} dla ciągu liczb Catalana spełnia


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{C}(x)=\frac{1-\sqrt{1-4x}}{2x}. }


Dowód

Używając zależności rekurencyjnej z Obserwacji 8.1 otrzymujemy:


Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \aligned\fGen{C}(x)&=&\sum_{n=0}^{\infty}c_nx^n\\ &=&1+\sum_{n=1}^{\infty}\left(c_0 c_{n-1}+c_1 c_{n-2}+\ldots+ c_{n-1} c_0\right)x^n\\ &=&1+x\fGen{C}(x)\fGen{C}(x), \endaligned}


skąd natychmiast:


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{C}(x)=\frac{1\pm\sqrt{1-4x}}{2x}. }


Warunek Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{C}(0)=c_0=1} eliminuje rozwiązanie Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{C}(x)\cdot 2x = 1+\sqrt{1-4x}} , a zatem


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{C}(x)=\frac{1-\sqrt{1-4x}}{2x}. }


Twierdzenie 8.3

Liczby Catalana wyrażają się wzorem


cn=1n+1(2nn).


Dowód

Twierdzenie o rozwinięciu funkcji (1+x)y w szereg daje


14x = n=0(1/2n)(4x)n.


Podstawiając powyższe rozwinięcie 14x do wzoru na Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{C}(x)} otrzymanego we Wniosku 8.2 po dokonaniu kilku prostych przekształceń otrzymujemy:


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{C}(x) =\frac{1-\sqrt{1-4x}}{2x} =\sum_{n=0}^{\infty}\frac{\left(1-1/2\right)\cdot\ldots\cdot\left(n-1/2\right)}{\left(n+1\right)!}4^nx^n, }


czyli


cn=(11/2)(n1/2)(n+1)!4n


Iloczyn (11/2)(n1/2) po wymnożeniu przez 2n przyjmuje postać


k=1n(2k1)=13(2n3)(2n1).


Mnożąc więc teraz ten iloczyn 2nn! otrzymujemy:


2nn!k=1n(2k1)=123(2n2)(2n1)2n=(2n)!.


Tym samym dostajemy


cn=1n+1(2nn).


Używając ostatniego Twierdzenia, można określic asymptotyczne zachowanie liczb Catalana.