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

Z Studia Informatyczne
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.

<flashwrap>file=Genfunc catalan.swf|size=small</flashwrap>

<div.thumbcaption>Wszystkie pełne drzewa binarne o 3 węzłach wewnętrznych

<flash>file=Genfunc drzewo.swf|width=250|height=250</flash>

<div.thumbcaption>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

  • 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}. }

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 \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 \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.

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:

  • Parser nie mógł rozpoznać (błąd składni): {\displaystyle \mbox{\sf h}(\perp)=0} ,
  • Parser nie mógł rozpoznać (błąd składni): {\displaystyle \mbox{\sf h}(T_0\wedge T_1)=\max\left(\mbox{\sf h}(T_0),\mbox{\sf h}(T_1) \right)+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 Parser nie mógł rozpoznać (nieznana funkcja „\rodzina”): {\displaystyle \rodzina{T}_h} będzie rodziną pełnych drzew binarnych o wysokości co najwyżej h. Wtedy Parser nie mógł rozpoznać (nieznana funkcja „\rodzina”): {\displaystyle t_h=\left\vert\rodzina{T}_h\right\vert} . Oczywiście Parser nie mógł rozpoznać (nieznana funkcja „\rodzina”): {\displaystyle \rodzina{T}_0={\left\{ {\perp} \right\}\ }} , a więc t0=1. Jedynym drzewem w Parser nie mógł rozpoznać (nieznana funkcja „\rodzina”): {\displaystyle \rodzina{T}_h} , które nie jest rozkładalne na lewe i prawe poddrzewo jest drzewo . Każde więc drzewo Parser nie mógł rozpoznać (nieznana funkcja „\rodzina”): {\displaystyle T_0\in\rodzina{T}_h-{\left\{ {\perp} \right\}\ }} jest postaci T0=TlTr, gdzie poddrzewa Tl oraz Tr są wysokości co najwyżej h1, tzn. Parser nie mógł rozpoznać (nieznana funkcja „\rodzina”): {\displaystyle T_l,T_r\in \rodzina{T}_{h-1}} . Dowolne więc drzewo z Parser nie mógł rozpoznać (nieznana funkcja „\rodzina”): {\displaystyle \rodzina{T}_h} wyznacza jednoznacznie parę drzew z Parser nie mógł rozpoznać (nieznana funkcja „\rodzina”): {\displaystyle \rodzina{T}_{h-1}} . Odwzorowanie to jest bijekcją, więc


Parser nie mógł rozpoznać (nieznana funkcja „\rodzina”): {\displaystyle \left\vert\rodzina{T}_h\right\vert=\left\vert\rodzina{T}_{h-1}\right\vert\cdot\left\vert\rodzina{T}_{h-1}\right\vert+1, }


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

<flash>file=Zliczanie drzewa wys.swf|width=250|height=200</flash>

<div.thumbcaption>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


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P}(x)=p_0+p_1x+p_2x^2+p_3x^3+\ldots }


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


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_{k_1,k_2,\ldots, k_m}}(x)=p'_0+p'_1x+p'_2x^2+p'_3x^3+\ldots,}


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ą Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_{1,5,10,25,50}}(x)} .

Obserwacja 8.7


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_k}(x)=1+x^k+x^{2k}+x^{3k}+\ldots=\frac{1}{1-x^k}. }


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


Parser nie mógł rozpoznać (nieznana funkcja „\begin{array}”): {\displaystyle p_{k,n}=\left\lbrace\begin{array} {ll} 1,&\textrm{jeśli}\ n=ak\ \textrm{dla}\ a=0,1,2,\ldots\\ 0,&\textrm{w przeciwnym wypadku.} \end{array} \right. }


Otrzymujemy w ten sposób


Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \aligned \fGen{P_k}(x)&=p_{k,0}+p_{k,1}x+p_{k,2}x^2+\ldots\\ &=1+x^k+x^{2k}+x^{3k}+\ldots, \endaligned}


która to funkcja zwija się do


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_k}(x)\ =\ \frac{1}{1-x^k}. }


Obserwacja 8.8


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_{k_1,k_2,\ldots, k_m}}(x)\ =\ \fGen{P_{k_1}}(x)\cdot\fGen{P_{k_2}}(x)\cdot\ldots\cdot\fGen{P_{k_m}}(x) =\ \frac{1}{1-x^{k_1}}\cdot\frac{1}{1-x^{k_2}}\cdot\ldots\cdot\frac{1}{1-x^{k_m}}.}


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


Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \aligned n&=j_1k_{l_1}+j_2k_{l_ 2}+\ldots+j_sk_{l_s}\\ &=\left(k_{l_1}+\ldots+k_{l_1}\right)+\left(k_{l_2}+\ldots+k_{l_2}\right)+\ldots+\left(k_{l_s}+\ldots+k_{l_s}\right), \endaligned}


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 Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_{k_1,k_2,\ldots, k_m}}(x)} .

Przykład

Niech Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_{1,2,3,4}}(x)=p''_0+p''_1x+p''_2x^2+\ldots} . 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 Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_1}(x)} oraz x21 pochodzi z Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_2}(x)} , odpowiada sumie 6=1+1+1+1+2. Poniżej zaznaczono w funkcji tworzącej Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_{1,2,3,4}}(x)} jednomiany 𝐱(𝟏+𝟏+𝟏+𝟏) oraz 𝐱𝟐


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \begin{array} {l} \fGen{P_{1,2,3,4}}(x)\ =\ 1+x+2x^2+3x^3+4x^4+6x^5+7x^6+\ldots\\ = \ \left(1 +x^1 +x^{\left(1+1\right)} +x^{\left(1+1+1\right)} +\mathbf{{x^{\left(1+1+1+1\right)}}} +x^{\left(1+1+1+1+1\right)} +x^{\left(1+1+1+1+1+1\right)} +\ldots\right)\\ = \cdot\left(1 +\mathbf{{x^2}} +x^{\left(2+2\right)} +x^{\left(2+2+2\right)} +x^{\left(2+2+2+2\right)} +x^{\left(2+2+2+2+2\right)} +\ldots\right)\\ = \cdot\left(1 +x^3 +x^{\left(3+3\right)} +x^{\left(3+3+3\right)} +x^{\left(3+3+3+3\right)} +x^{\left(3+3+3+3+3\right)} +\ldots\right)\\ = \cdot\left(1 +x^4 +x^{\left(4+4\right)} +x^{\left(4+4+4\right)} +x^{\left(4+4+4+4\right)} +x^{\left(4+4+4+4+4\right)} +\ldots\right) \end{array} }


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,


Informacja dla osoby robiącej aplety: Można było by napisać aplet, który polegałby na tym, że jeżeli najechałoby się myszką na jakąś inną sumę niż 6 = 1+1+1+1+2 np. na sumę 6 = 1+2+3, to podkreślenia i pogrubienia by znikały a podkreślała by się suma 6 = 1+2+3 oraz jednomiany x1, x2, x3, a także zmieniałoby się oczywiście wymienione jednomiany w ostatnim zdaniu przed szeregiem Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_{1,2,3,4}}(x)} (będące także podkreślone).


Przykład

W funkcji tworzącej


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_{1,5,10,25,50}}(x)=p'''_0+p'''_1x+p'''_2x^2+\ldots. }


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


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_{1,5,10,25,50}}(x)=\frac{1}{1-x}\cdot\frac{1}{1-x^5}\cdot\frac{1}{1-x^{10}}\cdot\frac{1}{1-x^{25}}\cdot\frac{1}{1-x^{50}}. }


Widzieliśmy już, że ogólnie


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_{k_1k_2\ldots k_m}}(x)\ =\ \frac{1}{1-x^{k_1}}\cdot\frac{1}{1-x^{k_2}}\cdot\ldots\cdot\frac{1}{1-x^{k_m}}. }


Twierdzenie 8.9[L. Euler]

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


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \displaystyle \fGen{P}(x)=\prod_{k=1}^{\infty}\frac{1}{1-x^k} =\frac{1}{1-x}\cdot\frac{1}{1-x^2}\cdot\ldots\cdot\frac{1}{1-x^n}\cdot\ldots }


Dowód

Niech Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{P_{\left(m\right)}}(x)=\fGen{P_{1,2,\ldots,m}}(x)} rozwija się w szereg n=0p(m)nxn, a formalny nieskończony splot


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \displaystyle \prod_{k=1}^{\infty}\fGen{P_k}(x) = \prod_{k=1}^{\infty}\frac{1}{1-x^k} = \prod_{k=1}^{\infty}\left(1+x^k+x^{2k}+x^{3k}+\ldots\right) }


zwija się do szeregu formalnego


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{F}(x)=f_0+f_1x+f_2x^2+f_3x^3+\ldots }


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


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{s_n}(x)=\left[\begin{array} {c}n\\ 0\end{array} \right]+\left[\begin{array} {c}n\\ 1\end{array} \right]x+\left[\begin{array} {c}n\\ 2\end{array} \right]x^2+\left[\begin{array} {c}n\\ 3\end{array} \right]x^3+\ldots, }


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


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{s_n}(x)=x^{\overline{n}}=x\cdot\left(x+1\right)\cdot\left(x+n-1\right). }


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 Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{s_k}(x)} otrzymujemy


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{s_n}(x)=\left(n-1\right)\fGen{s_{n-1}}(x)+x\fGen{s_{n-1}}(x)=\left(x+n-1\right)\fGen{s_{n-1}}(x). }


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


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{s_n}{x}=\left(z+n-1\right)\cdot\left(z+n-2\right)\cdot\ldots\cdot\left(x+1\right)\cdot x= x^{\overline{n}}, }


co kończy dowód.

Twierdzenie 8.11

Funkcja tworząca


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \displaystyle \fGen{S_k}(x)=\left\{\begin{array}{c}k\\ k\endarray \right\} +\left\{\begin{array}{c}k+1\\ k\endarray \right\}x+\left\{\begin{array}{c}k+2\\ k\endarray \right\}x^2+\left\{\begin{array}{c}k+3\\ k\endarray \right\}x^3+\ldots}


dla podziałowych liczb Stirlinga Parser nie mógł rozpoznać (nieznana funkcja „\endarray”): {\displaystyle \left\{\begin{array}{c}n\\ m\endarray \right\}} ma postać zwartą


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{S_k}(x)=\frac{1}{(1-x)\cdot(1-2x)\cdot\ldots\cdot(1-kx)}. }


Dowód

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


Parser nie mógł rozpoznać (nieznana funkcja „\endarray”): {\displaystyle \begin{array} {rcll} \left\{\begin{array}{c}n\\ 0\endarray \right\}&=&0,&\textrm{dla}\ n>0,\\ \left\{\begin{array}{c}k\\ k\endarray \right\}&=&1,&\textrm{dla}\ k\geq0,\\ \left\{\begin{array}{c}n+k\\ k\endarray \right\}&=&k\left\{\begin{array}{c}n+k-1\\ k\endarray \right\}+\left\{\begin{array}{c}n+k-1\\ k-1\endarray \right\},&\textrm{dla}\ n>1,\ k>0. \end{array} }


Po podstawieniu tych zależności w rozwinięciu funkcji tworzącej Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{S_k}(x)} otrzymujemy:


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{S_k}(x)=kx\fGen{S_k}(x)+\fGen{S_{k-1}}(x), }


skąd natychmiast:


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{S_k}(x)=\frac{1}{1-kx}\fGen{S_{k-1}}(x). }


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


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{S_k}(x)=\frac{1}{(1-kx)\cdot(1-(k-1)x)\cdot\ldots\cdot(1-x)}, }


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


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \displaystyle \fGen{G}(x)=\sum_{n=0}^{\infty}{g_nx^n}=g_0+g_1x+g_2x^2+g_3x^3+g_4x^4+\ldots. }


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


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \displaystyle \fGen{B}(x)=\sum_{n=0}^{\infty}\frac{B_n}{n!}x^n=\frac{B_0}{0!}+\frac{B_1}{1!}x+\frac{B_2}{2!}x^2+\frac{B_3}{3!}x^3+\ldots }


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


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{B}(x)=e^{(e^x-1)}. }


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 Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \displaystyle \fGen{B}(x)=\sum_{n=0}^{\infty}\frac{B_n}{n!}x^n} to


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \displaystyle \fGen{B'}(x) =\sum_{n=1}^{\infty}\frac{n B_n}{n!}x^{n-1} = \sum_{n=0}^{\infty}\frac{B_n}{n!}x^{n}. }


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 Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{B}(x)} . Otrzymujemy więc równość


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{B'}(x)=e^x\fGen{B}(x),}      (2)


której rozwiązaniem przyjmującym wartość Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{B}(0)=B_0=1} jest


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{B}(x)=e^{(e^x-1)}. }


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


Parser nie mógł rozpoznać (nieznana funkcja „\fGen”): {\displaystyle \fGen{B'}(x)=(e^{(e^x-1)})'=e^xe^{(e^x-1)}=e^x\fGen{B}(x).}