Post on 11-Jan-2017
Wstęp do teorii informacji: Wykład 6
I. KODY
Rozpatrzmy zbiór D = {x1, . . . , xn}, który nazywaćbędziemy alfabetem. Zbiór, którego elementami są skoń-czone ciągi si = xi1 . . . xik oznaczamy D
∗ i nazywamysłownikiem. Elementami słownika są słowa.
Definicja 6.1: Kodem C dla zmiennej losowej A : X →Y nazywamy odwzorowanie C : X → D∗.
Przykłady: (a) D = {0, 1}. C(Białe) = 00,C(Czarne) = 11. Zbiór {Białe,Czarne} może być dzie-dziną zmiennej losowej, np. A(Białe) = +100 zł,A(Czarne) = −100 zł, określającej wygraną w zakładzie.Jeżeli zakład dotyczy partii szachów, białymi gra Kaspa-row, a czarnymi ja, to możemy określić prawdopodobień-stwa zwycięstwa,
p(Białe) = 1− ǫ ≈ 1, p(Czarne) = ǫ≪ 1.
(b) Kod z Wykładu 1:
C(K1) = 0C(K2) = 10,
C(K3) = 110,C(K4) = 1110,C(K5) = 111100,
C(K6) = 111101,C(K7) = 111110,
C(K8) = 111111.
Ze słowami Kj zwiazane są prawdopodobieństwap(Kj) = pj . Oba powyższe kody są binarne, gdyż lite-rami alfabetu sa bity.
Definicja 6.2: Kod jest jednozancznie dekodowalny je-żeli podział dowolnego ciągu liter alfabetu na słowa jestjednoznaczny.
Definicja 6.3: Kod nazywamy przedrostkowym (prefik-sowym, natychmiastowym), jeżeli żadne słowo ze słow-nika nie jest przedrostkiem innego słowa (inaczej: słoworozpoznajemy natychmiast po doczytaniu do jego ostat-niej litery, a nie dopiero po przeczytaniu dłuższego frag-mentu tekstu).
Uwaga: Każde słowo można reprezentować graficznie ja-ko „liść drzewa kodowego”. Na Rys. 1 „liście” zaznaczonesą jako węzły numerowane od A do I. Jeżeli przesuwającsię najkrótszą drogą od góry w dół napotkamy na liść, tonie musimy iść dalej, gdyż na tej drodze na inny liść jużnie napotkamy. Na tym właśnie polega własność przed-rostkowości. Kod nie jest przedrostkowy, jeżeli napotkaw-szy na liść musimy iść do końca gałęzi, żeby sprawdzić,czy nie ma tam dalszych liści.
0 1
A
B
C
D
E
F
G
H
I
Rysunek 1: Drzewo odpowiadające kodowi przedrostkowemu.A = 00000, B = 0001, C = 001, D = 0100, E = 01010,F = 0110, G = 10, H = 1100, I = 111.
II. NIERÓWNOŚĆ KRAFTA
Oznaczmy przez li długość słowa si ∈ {s1, . . . , sN}.Nierówność Krafta jest pewną cechą drzew z Rys. 1. Niestosuje sie ona jedynie do kodów.
Twierdzenie 6.1: (Twierdzenie Krafta) Długości słówzapisanych w binarnym kodzie przedrostkowym spełniająnierówność Krafta
N∑
i=1
2−li ¬ 1. (1)
Ponadto, jeżeli spełniona jest nierówność Krafta, to ist-nieje odpowiadający jej kod przedrostkowy.
Dowód : Rozpatrzmy kod przedrostkowy w rodzaju tegoz Rys. 1. Zapytajmy, ile dróg jest zablokowanych przezliście, włączając w to drogi o maksymalnej długości. Ła-two widać, że jeżeli długość najdłuższej drogi wynosi l, tona drzewie jest 2l możliwych dróg startujących od wierz-chołka i docierających na sam dół. Jeżeli na i-ty liść na-trafiamy po li krokach, to do samego dołu brakuje naml− li kroków. Czyli taki liść blokuje 2l−li dróg w dół. Wsumie liście blokują
N∑
i=1
2l−li ¬ 2l (2)
dróg. Dzieląc tę nierówność obustronnie przez 2l uzysku-jemy nierówność Krafta. Mając zbiór długości spełniają-cych nierówność Krafta możemy je zawsze odwzorowaćna odpowiednie drzewo z liśćmi, a to wystarcza do zdefi-niowania kodu przedrostkowego. �
Uwaga: Jeżeli zamiast alfabetu binarnego użyjemy alfa-betu D-narnego, D = {0, . . . , D − 1}, nierówność Kraftadowodzi się w postaci
N∑
i=1
D−li ¬ 1. (3)
2
1 2 3 4 5
0.5
1
1.5
2
2.5
3
3.5
Rysunek 2: Wykres funkcji f(x) = x−1−ln x. Jest ona zawszenieujemna, więc x− 1 ln x.
Dowód bazuje na drzewach, w których każde rozgałęzie-nie zawiera D możliwości.
III. TWIERDZENIA SHANNONA OKODOWANIU DYSKRETNYM
Zacznijmy od obserwacji, iż dla x > 0 prawdziwa jestnierówność lnx ¬ x − 1, co pokazuje Rys. 2. Zmienia-jąc podstawę logarytmu przepisujemy nierówność jakolog x ¬ (x− 1) log e.
Twierdzenie 6.2: Rozpatrzmy zbiór słów {s1, . . . , sN}o długościach {l1, . . . , lN} i prawdopodobieństwach wy-stąpienia {p1, . . . , pN}. Średnia długość L(p1, . . . , pN ) =∑
i pili jest ograniczona od dołu przez entropię H =H(p1, . . . , pN),
H ¬ L. (4)
Dowód :
H − L = −∑
i
pi log pi −∑
i
pili
= −∑
i
pi log pi −∑
i
pi log 2li
= −∑
i
pi log(pi2li)
=∑
i
pi log1pi2li
·
i
pi
( 1pi2li
− 1)
log e (5)
=(∑
i
pi1pi2li
−∑
i
pi
)
log e
=(∑
i
2−li − 1)log e (6)
¬ (1− 1) log e = 0. (7)
Szacowanie (5) wynika z Rys. 2, a przejście od (6) do (7)wykorzystuje nierówność Krafta.�
Definicja 6.4: Długością Shannona i-tego słowa nazy-wamy najmniejszą liczbę naturalną wiekszą lub równąlog 1pi, czyli li = ⌈log 1pi ⌉. Kod, w którym słowa mają
długości Shannona, nazywamy kodem Shannona.
Twierdzenie 6.3: W kodzie Shannona średnia długośćL =∑
i pili spełnia
H(p1, . . . , pN ) ¬ L(p1, . . . , pN ) < H(p1, . . . , pN) + 1 (8)
Dowód : Trzeba udowodnić tylko górne szacowanie, co wy-nika z nierówności
x ¬ ⌈x⌉ < x+ 1 (9)
prawdziwej dla każdej liczby rzeczywistej x. Tak więc
log1pi¬ li =
⌈
log1pi
⌉
< log1pi+ 1. (10)
Prawa nierówność jest ostra. Mnożąc obustronnie przezpi i sumując, znajdujemy
∑
i
pi log1pi·
i
pili <∑
i
pi log1pi+∑
i
pi, (11)
co mieliśmy udowodnić.�
Rozpatrzmy teraz k-literowe słowa zapisane w jakimśalfabecie, D = {x1, . . . , xn}. Oznaczmy prawdopodobień-stwa związane z częstotliwościami wystąpienia liter jako{q1, . . . , qn}. Tak więc prawdopodobieństwa pojawiającesie w poprzednim twierdzeniu bedą postaci pi = p(si) =p(xi1 . . . xik) = qi1 . . . qik . Entropia związana z takimiprawdopodobieństwa spełnia równość
H(p1, . . . , pN) = −∑
i
pi log pi,
= −∑
i1...ik
qi1 . . . qik log(qi1 . . . qik),
= −∑
i1...ik
qi1 . . . qik log qi1
...−∑
i1...ik
qi1 . . . qik log qik
= −∑
i1
qi1 log qi1
...−∑
ik
qik log qik
= −k∑
i
qi log qi = kH(q) (12)
Podstawiając to do (8) uzyskujemy nierówność
H(q) ¬L(p1, . . . , pN )
k< H(q) +
1k
(13)
3
skąd wynika
Twierdzenie 6.4: (Podstawowe twierdzenie Shannonao kodowaniu dyskretnym) Możliwe jest takie przypisaniesłów kodowych ciągom k-literowym, żeby spełniona byławłasność przedrostkowa oraz dla średniej długości słówkodowych L = L(p1, . . . , pN ) zachodziła nierówność (13).Czyli średnia długość słowa przypadająca na jedną literęalfabetu może byc dowolnie bliska entropii alfabetu.
Uwagi: (a) Kod jest przedrostkowy, gdyż szacowania po-jawiające się w twierdzeniach 6.2 i 6.3 wykorzystywały wdowodach nierówność Krafta. (b) Kompresja kodu pole-ga na zmniejszaniu jego średniej długości. Widzimy więc,że kodowanie przy pomocy dłuższych ciągów liter możepoprawiać stopień kompresji (wyznaczany przez porów-nanie L z entropią).
IV. KODOWANIE SHANNONA
A. Przykład
Zacznijmy od przykładu [1]. Znajdźmy predrostkowybinarny kod Shannona dla słów s1 = A, s2 = B, s3 = C,s4 = D, s5 = E, jeżeli pojawiają się w tekście z praw-dopodobieństwami p1 = 0, 35, p2 = 0, 17, p3 = 0, 17,p4 = 0, 16, p5 = 0, 15. Zauważmy, iż słowa uporządko-waliśmy tak, aby p1 p2 p3 p4 p5. Definiujemyteraz wielkości
P1 = 0,P2 = p1 = 0, 35,
P3 = p1 + p2 = 0, 52,P4 = p1 + p2 + p3 = 0, 69,
P5 = p1 + p2 + p3 + p4 = 0, 85.
Długości słów w kodzie binarnym definiujemy jako
l1 =⌈
log10035
⌉
= 2,
l2 =⌈
log10017
⌉
= 3,
l3 =⌈
log10017
⌉
= 3,
l4 =⌈
log10016
⌉
= 3,
l5 =⌈
log10015
⌉
= 3.
Jako kod potraktujemy początkowe bity (te po przecin-ku) binarnych rozwinięć liczb Pj :
P1 = 0, 00P2 = 0, 010 . . . ,P3 = 0, 100 . . . ,
P4 = 0, 101 . . . ,P5 = 0, 110 . . . .
0 1
A
B C D E
Rysunek 3: Drzewo odpowiadające przedrostkowemu kodowiShannona: A = 00, B = 010, C = 100, D = 101, E = 110.
Ostatecznie: C(A) = C(s1) = 00, C(B) = C(s2) = 010,C(C) = C(s3) = 100, C(D) = C(s4) = 101, C(E) =C(s5) = 110. Drzewo kodu pokazane jest na Rys. 3. Wi-dać od razu, że kod można skrócić bez utraty przedrost-kowości (ostatni bit można usunąć z B i E). Kod Shan-nona nie zawsze jest optymalny.
B. Konstrukcja ogólna
Porządkujemy prawdopodobieństwa p1 · · · pn.Następnie tworzymy sumy według reguły P1 = 0, Pj =∑j−1i=1 pi, dla j > 1, po czym zapisujemy je binarnie
Pj =b121+b222+ · · ·+
blj2lj+ . . . (14)
Kodem jest ciąg bitów b1 . . . blj . Ponieważ jest to kodShannona, więc długości słów spełniają nierówność (10),którą równoważnie przepiszemy jako
1pi¬ 2li <
2pi
(15)
lub, wygodniej, jako
pi 12li>pi2. (16)
Ponieważ Pj+1 = Pj + pj , zachodzi
Pj+1 − Pj = pj 12li. (17)
Binarnie
12li= 0, 0 . . .01︸ ︷︷ ︸
li
. . . (18)
gdzie 1 pojawia się na li-tej pozycji. Każda liczba x <1/2li zapisuje się jako
x = 0, 0 . . . 0︸ ︷︷ ︸
li
bli+1 . . . (19)
gdzie na prawo od li-tego bitu znajduje sie chociaż jedno0 (gdyby były same jedynki, to byłby to równoważnyzapis liczby 1/2li). Ponieważ pi 1/2li, więc pi musi
4
na pierwszych li bitach mieć co najmniej jedną jedynkę.Rozpatrzmy teraz
Pj = 0, b1 . . . bljbli+1 . . . , .
Każdy Pi jest ułamkiem właściwym, 0 ¬ Pi < 1, więcbit przed przecinkiem jest zawsze 0. Dodając pj do Pjmusimy zmienić chociaż jeden z pierwszych lj bitów, co
jest równoznaczne stwierdzeniu, iż na gałęzi drzewa ko-dowego gałąź reprezentująca Pj+1 odłącza się od gałęzireprezentującej Pj powyżej liścia reprezentującego C(sj),przy czym gałąź C(sj+1) jest nie krótsza niż gałąź C(sj)(co wynika z ustawienia słów według malejącego praw-dopodobieństwa). Kod jest zatem przedrostkowy.
[1] A. Drozdek, Wprowadzenie do kompresji danych (WNT,Warszawa, 1999).