Matematyka dyskretna 1/Wykład 8: Funkcje tworzące w zliczaniu obiektów kombinatorycznych: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian
Linia 73: Linia 73:


<center>
<center>
<math>c_n=c_0 c_{n-1}+c_1 c_{n-2}+\ldots+ c_{n-1} c_0</math>
<math>c_n=c_0 c_{n-1}+c_1 c_{n-2}+ \ldots + c_{n-1} c_0</math>
</center>
</center>


Linia 80: Linia 80:


{{wniosek|8.2|wn 8.2|
{{wniosek|8.2|wn 8.2|
Funkcja tworząca <math>{C}(x)=c_0+c_1x+c_2x^2+\ldots</math> dla ciągu liczb Catalana spełnia
Funkcja tworząca <math>{C}(x)=c_0+c_1x+c_2x^2+ \ldots</math> dla ciągu liczb Catalana spełnia




Linia 91: Linia 91:


<center><math>\begin{align}{C}(x)&=\sum_{n=0}^{\infty}c_nx^n\\
<center><math>\begin{align}{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+\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{C}(x){C}(x),
&=1+x{C}(x){C}(x)
\end{align}</math></center>
\end{align}</math></center>


Linia 133: Linia 133:
<center><math>{C}(x)
<center><math>{C}(x)
=\frac{1-\sqrt{1-4x}}{2x}
=\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,
=\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
</math></center>
</math></center>


Linia 140: Linia 140:




<center><math>c_n = \frac{\left(1-1/2\right)\cdot\ldots\cdot\left(n-1/2\right)}{\left(n+1\right)!}4^n
<center><math>c_n = \frac{\left(1-1/2\right)\cdot\ldots\cdot\left(n-1/2\right)}{\left(n+1\right)!}4^n</math></center>
</math></center>




Linia 172: Linia 171:




<center><math>c_n\sim\frac{4^{n+1}}{4\left(n+1\right)\sqrt{\pi n}},
<center><math>c_n\sim\frac{4^{n+1}}{4\left(n+1\right)\sqrt{\pi n}}</math></center>
</math></center>





Wersja z 22:37, 15 wrz 2023

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.

Plik:Genfunc catalan.mp4
Wszystkie pełne drzewa binarne o 3 węzłach wewnętrznych
Drzewo T posiadające lewe poddrzewo T_l oraz prawe poddrzewo Tr

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.

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

  • Tn będzie rodziną wszystkich drzew binarnych o n węzłach wewnętrznych, oraz
  • Tnl,nr będzie rodziną wszystkich drzew, których lewe i prawe poddrzewo mają odpowiednio nl oraz nr węzłów wewnętrznych.

Zachodzi więc:


|Tnl,nr|=|Tnl×Tnr|=|Tnl||Tnr|=cnlcnr

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ę


Tn=T0,n1T1,n2Tn1,0


W konsekwencji otrzymujemy:


cn=c0cn1+c1cn2++cn1c0


Wniosek 8.2

Funkcja tworząca C(x)=c0+c1x+c2x2+ dla ciągu liczb Catalana spełnia


C(x)=114x2x


Dowód

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


C(x)=n=0cnxn=1+n=1(c0cn1+c1cn2++cn1c0)xn=1+xC(x)C(x)


skąd natychmiast:


C(x)=1±14x2x


Warunek C(0)=c0=1 eliminuje rozwiązanie C(x)2x=1+14x, a zatem


C(x)=114x2x


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 C(x) otrzymanego we Wniosku 8.2 po dokonaniu kilku prostych przekształceń otrzymujemy:


C(x)=114x2x=n=0(11/2)(n1/2)(n+1)!4nxn


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.

Wniosek 8.4

Asymptotyczne zachowanie liczb Catalana dane jest przez


cn4n+14(n+1)πn


tzn.


limncn4n+14(n+1)πn=1


W praktyce często pojawia się konieczność zliczania drzew z uwagi na ich wysokość. Odpowiada to zliczaniu termów z uwagi na zagłębienie.

Wysokość drzewa określona jest rekurencyjnie jako:

  • h()=0,
  • h(T0T1)=max(h(T0),h(T1))+1.

Obserwacja 8.5

Liczba th drzew binarnych o wysokości co najwyżej h wyraża się równaniem rekurencyjnym


{t0=1,th=th12+1 dla h>1.


Dowód

Niech Th będzie rodziną pełnych drzew binarnych o wysokości co najwyżej h. Wtedy th=|Th|. Oczywiście T0={} , a więc t0=1. Jedynym drzewem w Th, które nie jest rozkładalne na lewe i prawe poddrzewo jest drzewo . Każde więc drzewo T0Th{}  jest postaci T0=TlTr, gdzie poddrzewa Tl oraz Tr są wysokości co najwyżej h1, tzn. Tl,TrTh1. Dowolne więc drzewo z Th wyznacza jednoznacznie parę drzew z Th1. Odwzorowanie to jest bijekcją, więc


|Th|=|Th1||Th1|+1,


skąd natychmiast dostajemy naszą zależność rekurencyjną.

Plik:Zliczanie drzewa wys.svg
Drzewa o wysokości co najwyżej 2

Wniosek 8.6

Dla h1 mamy:

22h1th22h1,

Dowód

Dowód przeprowadzimy indukcyjnie ze względu na h. Dla h=1 mamy t1=t02+1=2, oraz 22h1=2=22h1 Niech więc h>1 i załóżmy dla indukcji, że

22h2th122h11

Wtedy:

(22h2)2+1th12+1(22h11)2+1

skąd natychmiast:

22h1(22h2)2+1th(22h11)2+1=22h2+1=1422h+122h1

Zliczanie podziałów liczby na sumy

Przypomnijmy, że przez P(n,k) oznaczyliśmy liczbę podziałów liczby n na dokładnie k składników. Wtedy pn=k=1nP(n,k) oznacza liczbę wszystkich możliwych podziałów liczby n na sumę.

Przykład

Policzmy wszystkie sposoby przedstawienia liczby 6 za pomocą sumy dodatnich liczb naturalnych.


6=a0+a1++ak1,


gdzie k oraz a0a1ak1 są dodatnimi liczbami naturalnymi. Oto one


6=1+1+1+1+1+16=2+2+26=1+1+1+1+26=1+56=1+1+1+36=2+46=1+1+2+26=3+36=1+1+46=66=1+2+3


tzn. p6=11.

Funkcja tworząca podziału liczby na sumy to szereg


P(x)=p0+p1x+p2x2+p3x3+


Ponadto funkcja tworząca podziału liczby na sumy złożone wyłącznie z liczb k1,k2,,km oznaczać będziemy przez


Pk1,k2,,km(x)=p'0+p'1x+p'2x2+p'3x3+,


gdzie p'n to liczba podziałów liczby n na sumę n=a0+a1++ak1, gdzie k{0}  oraz a0,a1,,ak1{k1,k2,,km} .

Przykład

Pierwszy przykład w wykładzie o funkcjach tworzących dotyczył możliwości rozmiany kwoty za pomocą jednocentówek, pięciocentówek, dziesięciocentówek, ćwierćdolarówek oraz półdolarówek. Rozważaliśmy więc tam funkcję tworzącą P1,5,10,25,50(x).

Obserwacja 8.7


Pk(x)=1+xk+x2k+x3k+=11xk


Dowód

Niech pk,n będzie liczbą rozkładów liczby n na sumę złożoną wyłącznie ze składników równych k. Oczywiście jeśli k dzieli n, to istnieje dokładnie jedna suma n=k+k++k. Jeśli natomiast n nie jest podzielne przez k, to taki rozkład nie istnieje, tak więc


pk,n={1,jeśli n=ak dla a=0,1,2,0,w przeciwnym wypadku.


Otrzymujemy w ten sposób


Pk(x)=pk,0+pk,1x+pk,2x2+=1+xk+x2k+x3k+,


która to funkcja zwija się do


Pk(x)=11xk


Obserwacja 8.8


Pk1,k2,,km(x) = Pk1(x)Pk2(x)Pkm(x)= 11xk111xk211xkm.


Dowód

Załóżmy, że splot


(1+xk1+x2k1+)(1+xk2+x2k2+) (1+xkm+x2km+)


jest przedstawiony jako szereg p'0+p'1x+p'2x2+p'3x3+. Wtedy oczywiście p'nxn jest sumą wszystkich jednomianów postaci xj1kl1xj2kl2xjskls, dla których xn=xj1kl1xj2kl2xjskls. Współczynnik p'n więc jest liczbą wszystkich ciągów s,j1,,js,l1,,ls takich, że


n=j1kl1+j2kl2++jskls=(kl1++kl1)+(kl2++kl2)++(kls++kls),


tzn. p'n jest liczbą rozkładów liczby n na sumy o składnikach ze zbioru {k1,k2,,kn} , a zatem p'n jest n-tym współczynnikiem funkcji tworzącej Pk1,k2,,km(x).

Przykład

Niech P1,2,3,4(x)=p'0+p'1x+p'2x2+. Współczynnik p'6 to liczba iloczynów postaci xj1kl1xj2kl2xjskls równych x6, a zarazem liczba podziałów liczby 6 na sumy złożone ze składników 1,2,3 oraz 4. Każdemu iloczynowi odpowiada jeden podział. Na przykład x14x21, gdzie x14 pochodzi z P1(x) oraz x21 pochodzi z P2(x), odpowiada sumie 6=1+1+1+1+2. Poniżej zaznaczono w funkcji tworzącej P1,2,3,4(x) jednomiany 𝐱(𝟏+𝟏+𝟏+𝟏) oraz 𝐱𝟐


P1,2,3,4(x)=1+x+2x2+3x3+4x4+6x5+7x6+= (1+x1+x(1+1)+x(1+1+1)+𝐱(𝟏+𝟏+𝟏+𝟏)+x(1+1+1+1+1)+x(1+1+1+1+1+1)+)=(1+𝐱𝟐+x(2+2)+x(2+2+2)+x(2+2+2+2)+x(2+2+2+2+2)+)=(1+x3+x(3+3)+x(3+3+3)+x(3+3+3+3)+x(3+3+3+3+3)+)=(1+x4+x(4+4)+x(4+4+4)+x(4+4+4+4)+x(4+4+4+4+4)+)


Odpowiadają one zaznaczonemu rozkładowi na liście wszystkich rozkładów liczby 6:


6=1+1+1+1+1+1,6=1+2+3,6=1+1+1+1+2_,6=2+2+2,6=1+1+1+3,6=3+3.6=1+1+2+2,


Przykład

W funkcji tworzącej


P1,5,10,25,50(x)=p'0+p'1x+p'2x2+


współczynnik p'n jest liczbą podziałów liczby n na sumy postaci


n=1++1+5++5+10++10+25++25+50++50,


czyli liczbą sposobów na jakie można rozmienić n centów przy użyciu jednocentówek, pięciocentówek, dziesięciocentówek, ćwierćdolarówek oraz półdolarówek. Otrzymaliśmy więc rozwiązanie przykładu o rozmienianiu monet. Funkcja tworząca jest w poznanej już postaci równej


P1,5,10,25,50(x)=11x11x511x1011x2511x50


Widzieliśmy już, że ogólnie


Pk1k2km(x) = 11xk111xk211xkm


Twierdzenie 8.9[L. Euler]

Funkcja tworząca podziału liczby na sumy jest przedstawialna jako


P(x)=k=111xk=11x11x211xn


Dowód

Niech P(m)(x)=P1,2,,m(x) rozwija się w szereg n=0p(m)nxn, a formalny nieskończony splot


k=1Pk(x)=k=111xk=k=1(1+xk+x2k+x3k+)


zwija się do szeregu formalnego


F(x)=f0+f1x+f2x2+f3x3+


Oczywiście przy liczeniu fn z czynników (1+xk+x2k+x3k+), gdzie k>n, jedynie jednomian 1 odgrywa rolę, gdyż jednomiany xlk z l1 dają zbyt duże potęgi. A zatem fn=p(n)n. Ponieważ żaden składnik w rozkładzie n=a0+a1++as nie może przekraczać n, mamy pn=p(n)n, skąd natychmiast fn=pn, co kończy dowód.

Funkcje tworzące dla liczb Stirlinga oraz liczb Bella

Twierdzenie 8.10

Funkcja tworząca


sn(x)=[n0]+[n1]x+[n2]x2+[n3]x3+,


dla cyklowych liczb Stirlinga [nm] ma postać zwartą


sn(x)=xn=x(x+1)(x+n1)


Dowód

Cyklowe liczby Stirlinga spełniają następującą zależność rekurencyjną


[n0]=0,dla n>0,[nk]=0,dla k<n,[kk]=1,dla k0,[nk]=(n1)[n1k]+[n1k1],dla 0>k>n.


Po podstawieniu tych zależności w rozwinięciu funkcji tworzącej sk(x) otrzymujemy


sn(x)=(n1)sn1(x)+xsn1(x)=(x+n1)sn1(x)


Iterując powyższą równość otrzymujemy:


snx=(z+n1)(z+n2)(x+1)x=xn,


co kończy dowód.

Twierdzenie 8.11

Funkcja tworząca


Sk(x)={kk}+{k+1k}x+{k+2k}x2+{k+3k}x3+


dla podziałowych liczb Stirlinga {nm} ma postać zwartą


Sk(x)=1(1x)(12x)(1kx)


Dowód

Podziałowe liczby Stirlinga spełniają następującą zależność rekurencyjną


{n0}=0,dla n>0,{kk}=1,dla k0,{n+kk}=k{n+k1k}+{n+k1k1},dla n>1, k>0.


Po podstawieniu tych zależności w rozwinięciu funkcji tworzącej Sk(x) otrzymujemy:


Sk(x)=kxSk(x)+Sk1(x),


skąd natychmiast:


Sk(x)=11kxSk1(x)


Iterując powyższą równość otrzymujemy:


Sk(x)=1(1kx)(1(k1)x)(1x),


co kończy dowód.

Czasem, dla liczenia współczynników funkcji tworzącej wygodnie użyć jest rachunku różniczkowego i rozwinięcia funkcji w szereg Taylora. Dlatego dla ciągu (g0,g1,g2,g3,) obok funkcji tworzącej


G(x)=n=0gnxn=g0+g1x+g2x2+g3x3+g4x4+


rozważa się też tzw. wykładniczą funkcję tworzącą, tzn. wyrażenie postaci


n=0gnn!xn=g00!+g11!x+g22!x2+g33!x3+g44!x4+


Twierdzenie 8.12

Wykładnicza funkcja tworząca


B(x)=n=0Bnn!xn=B00!+B11!x+B22!x2+B33!x3+


dla liczb Bell'a B0,B1,B2,B3, ma postać zwartą


B(x)=e(ex1)


Dowód

Liczby Bella spełniają następującą zależność rekurencyjną


B0=1,Bn+1=(n0)B0+(n1)B1+(n2)B2++(nn)Bn,dla n>0.


Pochodna szeregu B(x)=n=0Bnn!xn to


B(x)=n=1nBnn!xn1=n=0Bnn!xn


Dzieląc obustronnie przez n! zależność rekurencyjną dla liczb Bella otrzymujemy


1n!Bn+1=10!1n!B0+11!1(n1)!B1++1n!10!Bn


Prawa strona tej równości jest współczynnikiem przy xn splotu funkcji ex z B(x). Otrzymujemy więc równość


B(x)=exB(x),      (2)


której rozwiązaniem przyjmującym wartość B(0)=B0=1 jest


B(x)=e(ex1)


Faktycznie, po podstawieniu rozwiązania do równości (2) uzyskujemy:


B(x)=(e(ex1))=exe(ex1)=exB(x).