Kodowanie Shannona-Fano
Kodowanie Shannona-Fano – nazwa obejmująca metody kompresji bezstratnej wynalezione równolegle przez Claude’a Shannona i Roberta Fano (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
edytujAlgorytm przedstawia się następująco[8]:
- s – ciąg symboli ze zbioru posortowanych według prawdopodobieństw
- 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
edytujNiech
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:
- różnica prawdopodobieństw 0,1;
- różnica prawdopodobieństw 0,5;
- 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ż
edytujPrzypisy
edytuj- ↑ 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.
- ↑ C.E. Shannon , A Mathematical Theory of Communication [online], reprint z poprawkami, Internet Archive [dostęp 2023-07-08] (ang.).
- ↑ Robert M. Fano , The Transmission of Information, „Technical Report No. 65”, 17 marca 1949 [dostęp 2023-07-07] (ang.).
- ↑ a b Drozdek 1999 ↓, s. 32, 34.
- ↑ 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.).
- ↑ I. Introduction, [w:] Stanislav Krajci i inni, Performance analysis of Fano coding, IEEE, czerwiec 2015, s. 1746–1750, DOI: 10.1109/ISIT.2015.7282755, ISBN 978-1-4673-7704-1 [dostęp 2023-07-07] (ang.).
- ↑ http://www.pkware.com/documents/casestudies/APPNOTE.TXT (dostęp 2008-09-20).
- ↑ 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.