ALG07

ALG07



2. Kompresja danych metodą Huffmana 307

Bity O i J, które są dokładane na danym etapie do zredukowanych znaków alfabetu, są wytłuszczone. Mam nadzieję, że czytelnik nie będzie miał zbytnich kłopotów z odtworzeniem sposobu konstruowania kodu, tym bardziej, że nasz przykład bazuje na krótkim alfabecie.

Przy klasycznej metodzie kodowania binarnego, komunikat o długości 60 (napisany z użyciem 6-znakowcgo alfabetu) zakodowalibyśmy przy' pomocy 60x3~lS0 bitów. Przy użyciu kodu Huffmana, ten sam komunikat zająłby odpowiednio: 20x2+17x2+ 10x2+9x3+3x4+1 x4~ 137 znaków (zvsk wynosi ok. 23 %).

Wiemy już jak konstruować kod. warto zastanowić się nad implementacją programową w C++. Nie chciałem prezentować gotowego programu kodującego, gdyż zająłby on zbyt dużo miejsca. Dobrą metodą byłoby skopiowanie struktury graficznej przedstawionej na dwóch ostatnich rysunkach. Jest to przecież tablica 2-wymiarowa, o rozmiarze maksymalnym 6x5. W jej komórkach trzeba by było zapamiętywać dość złożone informacje: kod znaku, częstotliwość jego występowania, kod bitowy. Z zapamiętaniem tego ostatniego nie byłoby problemu, możliw-ości w C++ jest dość sporo: tablica 0/1, liczba całkowita, której reprezentacja binarna byłaby tworzonym kodem... Podczas kodowania nie należy' również zapominać, aby wraz z kodowanym komunikatem posłać jego... kod Huffmana! (Inaczej odbiorca miałby pewne problemy z odczytaniem wiadomości).

Problemów' technicznych jest zatem dość sporo. Oczywiście, zaproponowany powyżej sposób wcale nie jest obowiązkowy. Bardzo interesujące podejście (wraz z gotowym kodem C++) prezentowane jest w [Sed92]. Autor używa tam kolejki priorytetowej do wyszukiwania znaków o najmniejszych prawdopodobieństwach, ale to podejście z kolei komplikuje nieco proces tworzenia kodu binarnego na podstawie zredukowanego alfabetu. Zaletą algorytmów bazujących na „stertopodobnych” strukturach danych jest jednak niewątpliwie ich efekty wność: operacje na stercie są bowiem klasy log N, co ma wymierne znaczenie praktyczne! Popatrzmy zatem, jak można wyrazić algorytm tworzenia drzewa kodowego Huffmana, właśnie przy użyciu tych struktur danych:

Huffmants, f!

// s - kodowany binarny ciąg znaków

lit- tablica częstotliwości występowania znaków w alfabecie (

wstaw wszystkie znaki ciągu s do stoi ty H stosownie do ich częstotliwości; dopóki H nie jest pusta wykonuj {

jeśli H zawiera tylko jeden znak X HÓwczaa X staje sie korzeniem drzewa Huffmana T;

w przeciwnym wypadku


Wyszukiwarka

Podobne podstrony:
ALG05 13.2, Kompresja danych metodą Huffmana 305 Tabela 13 - 2. Prawdopodobieństwa występowania lite
■ Kodowanie arytmetyczne H ■ Metoda daje lepszy stopień kompresji niż metoda Huffmana o kilka,
ALG03 13.2. Kompresja danych metodą Huflinana 303 Dwa krótkie sygnały oznaczają znak krótki i długi
img27 Operatory bitowe $a & $b AND Ustawiane są bity które są ustawione w obu zmiennych $a
istnieje jakikolwiek rodzaj treningu czy metoda nauczania, które nie mogłyby na jakimś etapie zyskać
Habermas09 114 Rozdział III nia etyczne, które są zorientowane na telos każdorazowo mojego albo nasz
LastScan2 7. Pamięć obejmująca zdolności proceduralne, które są oparte na automatycznym przypom
80 L. Cierpiałkowska, H. Sęk integracyjnej, w mniejszym stopniu tych psychoterapii, które są oparte
20778 Image182 (2) W rubryce przedstawiane są odpowiedzi na pytania nadesłane do Redakcji. Są to spr

więcej podobnych podstron