Kodowanie Shannona - Google

Kodowanie Shannona

Z Wikipedii

(Przekierowano z Kodowanie Shannona-Fano)
Skocz do: nawigacji, szukaj

Kodowanie Shannona, to metoda kodowania, którą Claude E. Shannon przedstawił jako jeden z dowodów swojego podstawowego twierdzenia o kodowaniu.

Kodowanie Shannona nie tworzy optymalnych kodów; nieco lepsze wyniki daje modyfikacja znana jako kodowanie Shannona-Fano. Kodowanie Shannona-Fano jest używane w kompresorze ZIP, przy wybranej kompresji metodzie implode[1].

Znacznie lepszą efektywnością charakteryzują się kodowanie Huffmana oraz kodowanie arytmetyczne.

Spis treści

[edytuj] Kodowanie Shannona

Dane jest źródło S = \{x_1, x_2, \ldots\} i stowarzyszone z nimi prawdopodobieństwa p = \{p_1, p_2, \ldots\}.

  1. Prawdopodobieństwa (a wraz z nimi symbole) są sortowane w porządku nierosnącym, tj. p_i \ge p_{i+1}.
  2. Następnie dla tak uporządkowanych danych oblicza się niepełne prawdopodobieństwo komulatywne: P(x_i) = p_1 + p_2 + \ldots + p_{i-1} - jest to suma wszystkich prawdopodobieństw od 1. do i-1 elementu.
  3. Kodowanie Shannona polega na wzięciu \lceil -\log_{2}{P_i}\rceil (długość Shannona) pierwszych bitów binarnego rozwinięcia liczby Pi (brane są bity po przecinku).

Średnia długość kodów mieści się w przedziale [H(S),H(S) + 1), gdzie H(S) to entropia źródła (średnia liczba bitów na symbol).

[edytuj] Przykład

Niech S = {a,b,c,d}, p = {0.45,0.3,0.2,0.05} (entropia H(S) = 1.72); prawdopodobieństwa są już podane nierosnąco.

Prawdopodobieństwa kumulatywne:

  • P1(a) = 0
  • P2(b) = p1 = 0.45
  • P3(c) = p1 + p2 = 0.45 + 0.3 = 0.75
  • P4(d) = p1 + p2 + p3 = 0.45 + 0.3 + 0.2 = 0.95

I ich rozwinięcia binarne (wzięte 5 pierwszych bitów po przecinku):

  • P1(a) = 0.000002
  • P2(b) = 0.011102
  • P3(c) = 0.110002
  • P4(d) = 0.111102

Długości Shannona (długości kodów w bitach):

  • l_a = \lceil -\log_{2}{0.45}\rceil = 2
  • l_b = \lceil -\log_{2}{0.30}\rceil = 2
  • l_c = \lceil -\log_{2}{0.20}\rceil = 3
  • l_d = \lceil -\log_{2}{0.05}\rceil = 5

Ostatecznie kody mają postać:

  • kod(a) = 002
  • kod(b) = 012
  • kod(c) = 1102
  • kod(d) = 111102


Średnia długość kodu L_k = 2 \cdot 0.45 + 2 \cdot 0.3 + 3 \cdot 0.2 + 5 \cdot 0.05 = 2.35 (k = 1). Po podstawieniu do nierówności podanej w twierdzeniu: 1.72 \le 2.35 < 1.72 + 1 stwierdzamy, że otrzymany kod rzeczywiście ją spełnia.

Jednak, jak wspomniano, efektywność kodowania Shannona nie jest duża - dla danych z tego przykładu wynosi \frac{H(S)}{L_k} \cdot 100\% = 73.2\%.

[edytuj] Kodowanie Shannona-Fano

Robert Fano zaproponował algorytm, który daje trochę lepsze wyniki kodowania - kody mogą być krótsze o 1 bit od kodów tworzonych metodą Shannona, także rozkład bitów może się różnić.

Kodowanie Shannona-Fano przedstawia się następująco:

  1. s - ciąg symboli ze zbioru S posortowanych wg prawdopodobieństw pi
  2. Shanon-Fano(s):
    • JeÅ›li s zawiera dwa symbole do sÅ‚owa kodu pierwszej litery dodaj 1, do sÅ‚owa kodu drugiej litery - 0.
    • W przeciwnym razie jeÅ›li s zawiera wiÄ™cej niż dwa symbole, podziel go na dwa podciÄ…gi s1 i s2 tak, żeby różnica miÄ™dzy sumÄ… prawdopodobieÅ„stw liter z s1 i s2 byÅ‚a najmniejsza. Do słów kodu symboli z s1 dodaj 1, do kodów symboli z s2 - 0. WywoÅ‚aj rekurencyjnie funkcje: Shannon-Fano(s1) oraz Shannon-Fano(s2).

[edytuj] Przykład

Niech S = {a,b,c,d}, p = {0.45,0.3,0.2,0.05}.

Początkowo ciąg s = abcd (porządek według malejącego prawdopodobieństwa).

Składa się z więcej niż 2 liter, zatem trzeba go podzielić. Możliwe są następujące sytuacje:

  1. s1 = a, s2 = bcd; różnica prawdopodobieństw 0.1;
  2. s1 = ab, s2 = cd; różnica prawdopodobieństw 0.5;
  3. s1 = abc, s2 = d; różnica prawdopodobieństw 0.9.

Wybierana jest pierwsza para, ponieważ różnica prawdopodobieństw jest najmniejsza. Do słów kodu liter z s1 = a dopisywane są 0, do słów kodu liter z s2 = bcd - 1:

a = 0
b = 1
c = 1
d = 1

Teraz wywoływana jest funkcja Shannon-Fano(s1) - ten ciąg ma długość 1 i nie jest już dalej przetwarzany. Następnie wykonywane jest Shannon-Fano(s2) - s2 jest dłuższy niż 2 i musi zostać podzielony.

Sytuacja jest podobna jak w poprzednim kroku, bo s12 = b i s22 = cd. Do słów kodu liter z s12 = b dopisywane są 0, do słów kodu liter z s22 = cd - 1:

a = 0
b = 10
c = 11
d = 11

Wywoływana jest funkcja Shannon-Fano(s12) - ten ciąg ma długość 1, nie jest już dalej przetwarzany. Następnie wykonywane jest Shannon-Fano(s22) - s22 ma długość 2, więc tutaj kodowanie kończy się - do słowa kodu pierwszego symbolu (c) dopisywane jest 0, a do słowa kodu drugiego kodu (d) - 1:

a = 0
b = 10
c = 110
d = 111

Średnia długość kodu L_k = 1 \cdot 0.45 + 2 \cdot 0.3 + 3 \cdot 0.2 + 3 \cdot 0.05 = 1.8. W tym przypadku efektywność kodowania wynosi \frac{H(S)}{L_k} \cdot 100\% = \frac{1.72}{1.80} \cdot 100\% = 95\%, jest więc znacznie lepsza niż kodowania Shannona.

[edytuj] Bibliografia

  • Claude. E. Shannon, "A Mathematical Theory of Communication", Bell System Technical Journal, vol. 27, str. 379-423, 623-656, lipiec, październik, 1948
  • Adam Drozdek, Wprowadzenie do kompresji danych, WNT 1999

[edytuj] Zobacz też

Przypisy


Pompy insulinowe potrzebne przy planowaniu ciąży
Kobiety z cukrzycą powinny mieć możliwość korzystania z pomp insulinowych już w okresie planowania ciąży. Zmniejsza to bowiem znacznie ryzyko wad wrodzonych i zgonów ich dzieci, mówili lekarze na konferencji w Warszawie.
Alternatywa dla aukcji uprawnień do emisji CO2
Polska proponuje, aby także po 2013 roku unijne elektrownie otrzymywały za darmo część uprawnień do emisji CO2. Dopiero powyżej pewnego poziomu emisji będą musiały kupować je na aukcji - poinformowało Ministerstwo Gospodarki (MG).
Co czwarty człowiek ma zaburzenia psychiczne
Co czwarty mieszkaniec Ziemi może cierpieć na zaburzenia psychiczne. Takie alarmujące statystyki przedstawiła w najnowszym raporcie Światowa Organizacja Zdrowia.
Po "melaminowej" aferze zwiększą się kontrole
W związku ze skandalem z melaminą w chińskim sproszkowanym mleku Chiny zaostrzyły kontrolę procesu produkcji wyrobów mleczarskich i zagroziły umieszczeniem nieuczciwych producentów na czarnej liście - podały tamtejsze media.
Szklarnie są odpowiedzialne za ochłodzenie klimatu?
Białe dachy szklarni w hiszpańskiej prowincji Almeria odbijają tyle światła słonecznego, że w okolicy obniżyła się temperatura. - informuje "New Scientist".
Linki: Strona g³ówna