Teoria informacji/TI Wykład 3

Z Studia Informatyczne
Wersja z dnia 22:16, 11 wrz 2023 autorstwa Luki (dyskusja | edycje) (Zastępowanie tekstu – „<math> ” na „<math>”)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Minimalna długość kodu

Jak widzieliśmy w analizie przykładu gry w zgadywanie, jeśli wszystkie prawdopodobieństwa są potęgami 12, to entropia jest równa średniej długości optymalnego kodu. Udowodnimy, że zawsze stanowi ona dolne ograniczenie:


Definicja [długość kodu]

Dla danego kodu φ, średnią długość kodu definiujemy jako
L(φ)=sSp(s)|φ(s)|

Dla danego S i parametru r>1 niech Lr(S) będzie minimum ze wszystkich L(φ) dla dowolnego kodu φ:SΣ*, gdzie |Σ|=r. Zauważmy, że na mocy Twierdzenia McMillana wystarczy, że znajdziemy minimum dla wszystkich kodów bezprefiksowych.


Twierdzenie

Dla dowolnej skończonej przestrzeni probabilistycznej S
Hr(S)Lr(S)
i równość zachodzi wtedy i tylko wtedy, gdy wszystkie prawdopodobieństwa p(s) są potęgami 1r

Dowód

Rozważmy dowolny kod φ:SΣ* gdzie |Σ|=r. Pokażmy, że

Hr(S)L(φ)

Wystarczy w tym celu użyć Złotego Lematu dla xi=p(si) i yi=1r|φ(si)|.

Pozostało jedynie pokazać drugą część twierdzenia. Jeśli Hr(S)=Lr(S), to znaczy, że Hr(S)=L(φ) dla pewnego kodu φ. Znów na podstawie Złotego Lematu dostajemy p(s)=1r|φ(s)| dla wszystkich sS.

Z drugiej strony, jeśli wszystkie prawdopodobieństwa są postaci 1r(s), to na mocy nierówności Krafta istnieje kod φ z |φ(s)|=(s), i dla tego kodu L(φ)=Hr(S). A zatem Lr(S)Hr(S), czyli musi zachodzić równość.


Znalezienie optymalnego kodu bezprefiksowego dla danego rozkładu prawdopodobieństwa nie jest wcale trudnym zadaniem. Algorytm rozwiązujący ten problem podał amerykański inżynier David A. Huffman (1925-1999).

Algorytm Huffmana
(dla zbioru kodowanego S i alfabetu Σ)
Jeśli |S||Σ|, przypisz po prostu jakieś symbole obiektom z S. W przeciwnym wypadku:
1. Jeśli |Σ|>2, w razie konieczności uzupełnij S symbolami o prawdopodobieństwie 0, 
   tak aby |S|mod(|Σ|1)=1.
2. Wybierz k=|Σ| symboli t1,,tkS o minimalnych prawdopodobieństwach.
3. Uruchom rekurencyjnie ten algorytm dla zbioru S=S{t1,,tk}+{#} z prawdopodobieństwami 
   qs=ps dla sS i q#=pt1++ptk.
4. Mając dane drzewo TS z poprzedniego punktu skonstruuj drzewo TS w następujący sposób: 
   Dodaj k synów do słowa TS(#) i oznacz ich jako t1,,tk.


Dla przedstawionej powyżej definicji kodu problem mamy zatem rozwiązany. Niestety, w większości wypadków długość takiego optymalnego kodu będzie się różniła od dolnej granicy Hr(S). Na szczęście możemy ten problem obejść. Okazuje się, że dla dowolnego zadanego S i p można uzyskiwać mniejszą średnią długość kodu, dowolnie zbliżając się do Hr(S). Uzyskuje się to przez lekkie poszerzenie samego pojęcia kodu.


Przykład [Kodowanie par]

Niech S={s1,s2} z p(s1)=34,p(s2)=14. Oczywiście L2(S)=1. (Jednocześnie łatwo oszacować, że H2(S)<1). Oznacza to, że nie możemy zakodować wiadomości αΣ* w postaci krótszej niż sama α. Wyobraźmy sobie jednak następujące kodowanie par:

s1s10s1s210s2s1110s2s2111

Nie jest to w dosłownym sensie kod dla S, ale wygląda na to, że możemy go użyć do zakodowania dowolnych wiadomości o parzystej długości. Faktycznie, zgodnie z definicją to jest kod dla S2. Rozważmy S2=S×S jako produkt (probabilistyczny) przestrzeni, w którym

p(si,sj)=p(si)p(sj)

Średnia długość naszego kodowania dwuznakowych bloków będzie wynosić

(34)21+3414(2+3)+(14)23=916+1516+316=2716<2

Jak można się spodziewać, podążając tym tropem dla kodów złożonych z trzech, czterech i więcej znaków, będziemy mogli otrzymać coraz efektywniejsze kodowania. Czy jednak możemy zejść poniżej granicy entropii, czyli uzyskać

Lr(Sn)n<Hr(S)

dla pewnego n?

Udowodnimy później, że to jest niemożliwe, ale Pierwsze Twierdzenie Shannona pokaże, że możemy zbliżyć się do niej dowolnie blisko dla n.

Najpierw jednak policzmy entropię H(Sn) przestrzeni Sn interpretowanej jako przestrzeń produktowa.

Entropia przestrzeni produktowej

Entropię H(Sn) możemy znaleźć przez nieco żmudne elementarne wyliczenia, ale wygodniej będzie skorzystać z ogólnych własności zmiennych losowych opisanych w wykładzie 7 z Rachunku prawdopodobieństwa i statystyki.

Przypomnijmy, że wartość oczekiwaną (zwaną też nadzieją matematyczną) zmiennej losowej X:S można przedstawić na dwa równoważne sposoby:

EX=sSp(s)X(s)=tX(S)tp(X=t)

Drugi sposób często zapisuje się prościej jako

ttp(X=t)

przyjmując, że suma dowolnie wielu zer daje 0.

Używana tutaj notacja p(X=t) jest szczególnym przypadkiem notacji p(ψ(X)), określającej prawdopodobieństwo że zachodzi zdarzenie ψ(X), czyli sumę p(s) po wszystkich sS, dla których zdanie ψ(X(S)) jest spełnione.

Przypominamy z Rachunku Prawdopodobieństwa (por. wspomniany wykład 7):

Fakt [Liniowość wartości oczekiwanej]

Jeśli X i Y są dowolnymi zmiennymi losowymi (określonymi na tej samej przestrzeni probabilistycznej), to dla dowolnych α,β:
E(αX+βY)=αEX+βEY


Rozważmy teraz przypadek, gdy mamy dwie przestrzenie probabilistyczne S i Q. (Zwyczajowo, jeśli nie powoduje to niejasności, będziemy używać tej samej litery p na określenie prawdopodobieństwa we wszystkich przestrzeniach).

Niech S×Q będzie przestrzenią produktową z prawdopodobieństwem określonym następująco

p(s,q)=p(s)p(q).

Dla zmiennych losowych X:S i Y:Q, definiujemy zmienne X^, Y^ na S×Q jako

X^(s,q)=X(s)
Y^(s,q)=Y(q)

Oczywiście mamy:

p(X^=t)=X^(s,q)=tp(s,q)=X(s)=tqQp(s)p(q)
=X(s)=tp(s)=P(X=t)

i analogicznie p(Y^=t)=p(Y=t). Zatem EX^=EX i EY^=EY. Z liniowości wartości oczekiwanej

E(X^+Y^)=EX^+EY^=EX+EY

Niech teraz X:slogr1p(s) i Y:qlogr1p(q). Zgodnie z definicją entropii, mamy więc Hr(S)=EX=EX^, Hr(Q)=EY=EY^. Z przyjętych definicji i własności funkcji log otrzymujemy

(X^+Y^)(s,q)=logr1p(s)+logr1p(q)=logr1p(s)1p(q)=logr1p(s,q)

A zatem (X^+Y^) jest dokładnie tą zmienną losową na S×Q, której wartość oczekiwana jest entropią S×Q. Czyli

Hr(S×Q)=E(X^+Y^)=Hr(S)+Hr(Q).

W konsekwencji:

Fakt

Niech Sn będzie n-tą potęgą przestrzeni S z prawdopodobieństwem p(s1,,sn)=p(s1)p(sn). Wtedy
HrSn=nHrS.