Kodowanie Shannona

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania

Kodowanie Shannona – metoda kompresji bezstratnej, 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, zaś optymalny kod wyznacza kodowanie Huffmana.

Kodowanie Shannona

Dane jest źródło S={x1,x2,} i stowarzyszone z nimi prawdopodobieństwa p={p1,p2,}.

  1. Prawdopodobieństwa (a wraz z nimi symbole) są sortowane w porządku nierosnącym, tj. pipi+1.
  2. Następnie dla tak uporządkowanych danych oblicza się niepełne prawdopodobieństwo kumulatywne: P(xi)=p1+p2++pi1 – jest to suma prawdopodobieństw elementów od 1 do i-1.
  3. Kodowanie Shannona polega na wzięciu log2pi (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).

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.

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

  • la=log20,45=2
  • lb=log20,30=2
  • lc=log20,20=3
  • ld=log20,05=5

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, zaznaczono słowa kodowe):

  • P1(a)=0,000002
  • P2(b)=0,011102
  • P3(c)=0,110002
  • P4(d)=0,111102

Ostatecznie kody mają postać:

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

Średnia długość kodu Lk=20,45+20,3+30,2+50,05=2,35 (k=1). Po podstawieniu do nierówności podanej w twierdzeniu (średnia długość kodów): 1,722,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 powyższego przykładu wynosi H(S)Lk100%=73,2%.

Zobacz też

Bibliografia

Linki zewnętrzne