Kodowanie Shannona-Fano

metoda kompresji bezstratnej

Kodowanie Shannona-Fano – nazwa obejmująca metody kompresji bezstratnej wynalezione równolegle przez Claude’a Shannona i Roberta Fano(inne języki) (opublikowane odpowiednio w 1948[1][2] i 1949[3]).

Nazwa „Shannon-Fano” może w zależności od publikacji (oraz kontekstu) obejmować obie metody, metodę Fano[4] lub metodę Shannona[5][6].

Kodowanie te dla dyskretnego źródła danych znajduje kod prefiksowy o zbliżonych do optymalnych kodach. Metoda Fano osiąga zazwyczaj słowa kodowe krótsze o 1 bit od metody kodowania Shannona[4].

Kodowanie Shannona-Fano jest używane w kompresorze ZIP, przy wybranej metodzie kompresji implode[7].

Algorytm tworzenia słów kodowych

edytuj

Algorytm przedstawia się następująco[8]:

  1. s – ciąg symboli ze zbioru   posortowanych według prawdopodobieństw  
  2. funkcja Shannon-Fano(s) (metoda Fano):
    • Jeśli s zawiera dwa symbole, do słowa kodu dla pierwszego symbolu dopisz 0, do słowa kodu dla drugiego symbolu dopisz 1.
    • W przeciwnym razie, jeśli s zawiera więcej niż dwa symbole, podziel je na dwa podciągi s1 i s2 tak, żeby różnica między sumą prawdopodobieństw symboli w s1 i s2 była jak najmniejsza. Do słów kodu dla symboli z s1 dopisz 0, do kodów dla symboli z s2 dopisz 1. Wywołaj rekurencyjnie funkcje: Shannon-Fano(s1) oraz Shannon-Fano(s2).

Przykład

edytuj

Niech    

Początkowo ciąg   (porządek według nierosnącego prawdopodobieństwa).

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

  1.     różnica prawdopodobieństw 0,1;
  2.     różnica prawdopodobieństw 0,5;
  3.     różnica prawdopodobieństw 0,9.

Wybierana jest pierwsza para, ponieważ różnica prawdopodobieństw podciągów s1 i s2 jest wtedy najmniejsza. Do słów kodu dla symboli z   dopisz 0, do słów kodu dla symboli z   dopisz 1:

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

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

Sytuacja jest podobna jak w poprzednim kroku, bo   i   Do słów kodu dla symboli z   dopisywane są 0, do słów kodu dla symboli z   dopisywane są 1:

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

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

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

Średnia długość kodu   W tym przypadku efektywność kodowania wynosi   Dla tych samych danych efektywność kodowania Shannona wynosi zaledwie  

Zobacz też

edytuj

Przypisy

edytuj
  1. Claude Shannon, A Mathematical Theory of Communication, „The Bell System Technical Journal”, 27 (3), AT & T Bell Laboratories, lipiec 1948, s. 379–423 [dostęp 2023-07-07] (ang.), na s. 403 Shannon odnosi się do metody Fano.
  2. C.E. Shannon, A Mathematical Theory of Communication [online], reprint z poprawkami, Internet Archive [dostęp 2023-07-08] (ang.).
  3. Robert M. Fano, The Transmission of Information, „Technical Report No. 65”, 17 marca 1949 [dostęp 2023-07-07] (ang.).
  4. a b Drozdek 1999 ↓, s. 32, 34.
  5. 3.7.1 Shannon-Fano Code, [w:] Te Sun Han, Kingo Kobayashi, Mathematics of Information and Coding, American Mathematical Soc., 2002, s. 95–96, ISBN 978-0-8218-4256-0 [dostęp 2023-07-07] (ang.).
  6. I. Introduction, [w:] Stanislav Krajci i inni, Performance analysis of Fano coding, IEEE, czerwiec 2015, s. 1746–1750, DOI10.1109/ISIT.2015.7282755, ISBN 978-1-4673-7704-1 [dostęp 2023-07-07] (ang.).
  7. http://www.pkware.com/documents/casestudies/APPNOTE.TXT (dostęp 2008-09-20).
  8. Drozdek 1999 ↓, s. 34–35.

Bibliografia

edytuj
  • Rozdział 1 - Informacja i kodowanie, Rozdział 2 - Kodowanie Shannona-Fano. W: Adam Drozdek: Wprowadzenie do kompresji danych. Warszawa: Wydawnictwa Naukowo-Techniczne, 1999. ISBN 83-204-2303-1.