Tym razem oprócz funkcji rozmiaru ∣⋅∣ mamy drugą funkcję wagi χ. Czyli mamy trójkę A=(A,∣⋅∣,χ)
z BGF A(z,u)=∑n,kan,kznuk,
gdzie an,k=∣{a∈A:∣a∣=n∧χ(a)=k}∣.
Mamy alfabet {0,1} ze słowami oczywiście x∈{0,1}∗. Definiujemy funkcje wag:
∣⋅∣ — długość ciągu,
χ(x) — waga Hamminga (liczba jedynek).
Czyli np. ∣010∣=3,χ(010)=1.
Mamy W(z,u)=∑n,k(kn)ukzn, jako że ciągów długości n i wadze Hamminga k jest (kn) (wybieramy k jedynek).
Warto zauważyć, że W(z,u)=n≥0∑(1+u)n⋅zn bo przecież mamy tam zagnieżdżoną znaną równość k=0∑n(kn)uk1n−k=(1+u)k gdzie to k jest zależne od naszego n. Zakładamy, że (kn) dla k>n jest równe zero, więc możemy to włożyć właśnie do naszej funkcji.
Dalej n≥0∑(1+u)n⋅zn=1−z(1+u)1.
W<k>(z)=∑n(kn)zn=(1−z)k+1zk gdzie k jest stałe
W(z,u)=∑kukW<k>(z)=∑k(1−z)k+1(uz)k=1−z1∑k(1−zuz)=1−z1⋅1−1−zuz1 a to po odpowiednich przekształceniach da nam to co wcześniej osiągnęliśmy przy W(z,u).
7. PGF (Probability generating functions)
Mamy pewne prawdopodobieństwa p0,p1,…. Funkcja PGF ma postać ∑piui gdzie pi=Pr[X=i].
Inaczej Pr(n),x[χ(x)=k]=anan,k gdzie n to jest oczywiście pewna stała. Czyli jakie jest prawdopodobieństwo, że wylosowane x będzie akurat wagi k.
Równoważny zapis: Pr(n),x[χ(x)=k]=[zn]A(z,1)[uk]([zn](A(z,u))), a co za tym idzie k∑Pr[χ(x)=k]uk=[zn]A(z,1)[zn]A(z,u).
7.1. Wartość oczekiwana
Wszystkie momenty: E(χ(χ−1)…χ(χ−1)(χ−r+1))==[zn]A(z,1)[zn]∂urA(z,u)∣u=1 gdzie χ jest zmienną losową oznaczającą wartość funkcji χ(x) dla x losowy o rozmiarze ∣x∣=n.
Patrzymy na wartość oczekiwaną E(χ)=[zn]A(z,1)[zn]∂uA(z,u)∣u=1
Mając A(z,u)=∑n,kan,kznuk liczymy pochodną: ∂uA(z,u)=n,k∑kan,kznuk−1∂uA(z,1)=n,k∑kan,kzn czyli [zn]∂uA(z,1)=k∑kan,k
Wówczas E(χ)=[zn]W(z,1)[zn]∂uW(z,u)∣u=1=[zn]1−2z1[zn](1−2z)2z=2n2n−1⋅n=2n co się zgadza, bo liczba jedynek w losowych ciągach długości n powinna być 2n, bo może być albo 1 albo 0 i oba te znaki mają takie samo p-o wystąpienia.
7.3. Wariancja
Ze wzoru ogólnego mamy E(χ2)=[zn]A(z,1)[zn]∂2A(z,u)∣u=1+[zn]A(z,1)[zn]∂uA(z,u)∣u=1Var(χ)=E(χ2)−(E(χ))2σ(χ)=Var(χ)(odchylenie standardowe)
Motywacja: czasami chcielibyśmy wiedzieć ile mamy cykli w danym algorytmie w celu jego analizy.
Mamy losową permutację o długości n.
Ile jest w niej cykli?
7.5.1. Liczby Stirlinga partycyjne (II rodzaju)
— określa nam liczbę sposobów na jakie możemy podzielić n-elementowy zbiór na k niepustych podzbiorów. {kn}
7.5.2. Liczby Stirlinga permutacyjne (I rodzaju)
— określa nam liczbę permutacji n-elementowych o k cyklach. [kn]
7.5.3. Jeszcze jedna maszynka
[zn]1−z1⋅ln1−z1=[zn](n≥0∑zn)(n≥1∑nzn)==[zn](k=1∑nkzn)=1+21+31+⋯+n1=Hn A wiadomo, że Hn≈lnn+γ+O(n1) gdzie γ≈0.52.
7.5.4. Idea
CYC(Z)↔ln1−z1
Permutacje o k cyklach: A=SEQ=k(CYC(Z))A(z)=bo nie obchodzi nas kolejnosˊcˊk!1(ln1−z1)k
Czyli [kn]=n![zn]k!1(ln1−z1)k
Nasze rozwiązanie będzie wywodzić się z Pr[#cykli jest k]=n![kn].
Mamy P<k>(z)=k!1(ln1−z1)k co określa nam permutacja o dokładnie k cyklach.
Dalej, chcemy wziąć wszystkie permutacje i tylko oznaczyć te, które mają k cykli. P(z,u)=k≥0∑uk⋅P<k>(z)==k≥0∑k!uk(ln1−z1)k==exp(uln1−z1)==(1−z1)u==n,k∑[kn]⋅znuk Oczywiście χ określa liczbę cykli.
Liczymy: E(χ)=[zn]P(z,1)[zn]∂uP(z,u)∣u=1==1[zn](1−z1)u⋅ln1−z1∣∣∣u=1==[zn]1−z1ln1−z1 korzystamy z wcześniej obliczonego wyrażenia i mamy E(χ)=Hn≈lnn.