Matematyczne podstawy kryptografii, Ćw2 TEMAT 7: Teoria Shannona. Kody Huffmana, entropia. BIBLIOGRAFIA: [] Cz. Bagiński, cez.wipb.pl, [2] T. H. Cormen, C. E. Leiserson, R. L Rivest, Wprowadzenie do algorytmów, [3] D. R. Stinson, Kryptografia w teorii i w praktyce ZAKRES MATERIAŁU Niech x,..., x n będzie ciągiem zdarzeń. I. Entropia Kodowaniem f nazywamy (też) funkcję f (x,..., x n ) = f (x)... f (x n ), gdzie II. Kodowania Huffmana a entropia Znak oznacza konkatenację ciągów. I. Entropia [Własności] (kodowania f) Funkcji f powinna być przekształceniem różnowartościowym, ponieważ tylko w takim przypadku zaszyfrowany [DEF ] (Entropia) Niech X zmienna losowa przyjmująca skończenie wiele wartości zgodnie z rozkładem prawdopodobieństwa p(x). Entropię tego rozkładu definiujemy (skompresowany / zakodowany) tekst da się odszyfrować (zdekompresować / zdekodować). Funkcja f musi być funkcją prefiksową (inaczej mówimy funkcją wolną od przedrostków) tzn. nie może zdarzyć się sytuacja, że dla dwóch elementów a, b X i ciągu x {,} * zachodzi f (a) = f (b) x (takie sytuacje powodowałyby niejasności przy dekodowaniu). n H (x) = pi log 2 pi (dla p i ) i= [Przykład ] Entropia jednego rzutu symetryczną kostką do gry jest równa, ponieważ informację, że wypadło /2/3/4/5/6 oczek można przekazać za pomocą jednej jednostki informacji. [Przykład 2] Entropia n niezależnych rzutów symetryczną kostką do gry jest równa n, ponieważ informację o n rzutach kostką można przekazać za pomocą n jednostek informacji. [Przykład 3] X jest zmienną losową przyjmującą wartości ze zbioru A = {a, b, c, d} z prawdopodobieństwami p(a)=/4, p(b)=/2, p(c)=/8, p(d)=/8. Policz entropię związaną z wylosowaniem jednej wartości ze zbioru A. Miara skuteczności kodowania f definiowana następująco 7 H(x) = log 2 log 2 log 2 log 2 = 2 + + 3 + 3 = (f ) = p(x) f (x) 4 4 2 2 8 8 8 8 4 2 8 8 4 x X Entropia wylosowania jednej wartości ze zbioru A wynosi 7/4. y -ozn. długość ciągu y. Entropia składników systemu kryptograficznego. Dąży się do wyszukania takiego różnowartościowego kodowania f, które minimalizuje wartość (f ). Możemy policzyć [Algorytm] (kompresji i dekompresji Huffmana) entropię H(K), gdzie K jest zmienną losową (reprezentującą klucz) przyjmującą wartości zgodnie z rozkładem Zachłanny algorytm Huffmana generuje kodowanie f, które prawdopodobieństwa p K, jest różnowartościowe entropię H(P), gdzie P jest zmienną losową (reprezentującą przestrzeń tekstu jawnego), prefiksowe entropię H(C), gdzie C jest zmienną losową (reprezentującą przestrzeń tekstu zaszyfrowanego) spełnia nierówności H (X) (f ) < H(X) + (entropia przybliża średnią długość kodowania Huffmana) [Przykład 4] Niech P = {a, b, c} będzie przestrzenią tekstów jawnych oraz niech prawdopodobieństwa a priori wystąpienia poszczególnych znaków tego zbioru będą równe p P (a) = / 4 i p P (b) = / 2, p P (c) = / 4. Entropię H(P) KOMPRESJA [Idea] (algorytmu kompresji Huffmana) liczymy 3 H(P) = log 2 log 2 log 2 = log2 4 + log2 2 + log 2 4+ = *2 + *+ *2 = 4 4 2 2 4 4 4 2 4 4 2 4 2 II. Kodowania Huffmana a entropia [DEF 2] (kodowanie) Niech X zmienna losowa przyjmująca wartości ze skończonego zbioru zgodnie z rozkładem prawdopodobieństwa p(x). Kodowanie zmiennej losowej X przekształcenie f :X {,} *. {,}* - zbiór wszystkich skończonych ciągów - [Przykład 5] Niech eksperyment polega na n-krotnym rzucie monetą Niech X = {O, R} (O orzeł, R - reszka) f (O) =, f (R) = - f nie jest funkcją prefiksową W takiej sytuacji (np. podczas rozkodowania ciągu...) nie ma jasności jaki jest pierwszy znak (O czy R). f (O) =, g (R) = - g jest funkcją prefiksową W takiej sytuacji zawsze mamy jednoznaczną odpowiedź, jaki jest kolejny znak (O czy R). [DEF 3] (średnia długość kodowania elementu X) () Wyznaczamy tablicę częstości wystąpień poszczególnych znaków w tekście i na jej podstawie określamy rozkład prawdopodobieństwa na zbiorze X możliwych znaków. (2) Generujemy uporządkowaną niemalejąco (ze względu na wartość prawdopodobieństwa) listę (np. ArrayList) jednowęzłowych drzew, których węzły zawierają następujące pola (klucz (prawdopodobieństwo wystąpienia), znak (lub w przypadku węzłów wewnętrznych), referencje do lewego i prawego poddrzewa) (3) Na podstawie listy tworzymy drzewo Huffmana. W tym celu, w każdej iteracji bierzemy z listy dwa drzewa L i L2 o najmniejszych prawdopodobieństwach w korzeniach i łączymy je w jedno drzewo. Kluczem korzenia powstałego drzewa jest suma prawdopodobieństw korzeni łączonych drzew. Jego lewym poddrzewem jest L, a prawym L2. Nowe drzewo umieszczamy na liście w taki sposób, by nadal była uporządkowana niemalejąco. Proces kończymy w momencie uzyskania jednego drzewa, które ma tę własność, że węzły wewnętrzne zawierają jedynie prawdopodobieństwa, a liście dodatkowo znaki występujące w kompresowanym tekście. (4) Generujemy kody Huffmana. Każdą lewą krawędź drzewa oznaczamy znakiem, a prawą. Czytamy każdą ze ścieżek drzewa zaczynając od korzenia i kończąc na liściu i zapisujemy występujące na ścieżce zera i
Matematyczne podstawy kryptografii, Ćw2 TEMAT 7: Teoria Shannona. Kody Huffmana, entropia. BIBLIOGRAFIA: [] Cz. Bagiński, cez.wipb.pl, [2] T. H. Cormen, C. E. Leiserson, R. L Rivest, Wprowadzenie do algorytmów, [3] D. R. Stinson, Kryptografia w teorii i w praktyce (6) zawartość skompresowanego pliku (tablica częstości i zakodowany tekst) jedynki. Powstałe ciągi --kowe stanowią kody znaków występujących w liściach. Znaki i ich kody zapisujemy w strukturze HashMap (znak w roli klucza i kod jako obiekt). (5) Kodujemy tekst korzystając z wygenerowanych kodów, a następnie każdy --kowy 8-elementowy podciąg zamieniamy na znak (zgodnie z tablicą kodów ASCII). Jeśli ostatni ciąg składa się z mniejszej niż osiem liczby znaków, dopełniamy go zerami. (6) Do pliku wyjściowego wklejamy tablicę częstości wystąpień poszczególnych znaków plus tekst w postaci zakodowanej. DEKOMPRESJA () Na podstawie informacji zawartej w skompresowanym pliku generujemy tablicę częstości wystąpień znaków. (2) Tworzymy listę drzew jednowęzłowych i na jej podstawie generujemy drzewo Huffmana. (3) Zamieniamy zakodowany tekst na ciąg --kowy (każdy znak tekstu to wartość z zakresu -255, którą zapisujemy w postaci binarnej) (4) Na podstawie tablicy częstości określamy ile znaków należy rozkodować. Czytamy kolejne zera i jedynki ciągu i na tej podstawie poruszamy się odpowiednio w lewo lub w prawo na drzewie Huffmana. Po rozkodowaniu fragmentu ciągu - (tj. po przypisaniu mu odpowiedniego znaku znajdującego się w liściu drzewa) rozpoczynamy dekodowanie kolejnego (startując na nowo od korzenia drzewa). [Zadanie ] Zastosuj algorytm kompresji i dekompresji Huffmana dla poniższego tekstu. ala ma kota KOMPRESJA () tablica częstości wystąpień poszczególnych znaków w tekście częstość 4 2 (2) uporządkowana niemalejąco lista drzew jednowęzłowych k l m o t spacja a.99999.99999.99999.99999.99999.88888.3636363636 (3) drzewo kodów Huffmana.88888 (4) kody Huffmana.3636363636.99999.99999.99999 k l m.88888.99999 o {spacja=, o=, k=, m=, a=, t=, l=} (5) zakodowany tekst z podziałem na podciągi 8-znakowe a l a m a k o t a czerwone zera dopełniają ostatnią ósemkę..99999 t.2727272727.88888 spacja.6363636364.3636363636 a a-4,l-,-2,m-,k-,o-,t- DEKOMPRESJA () tablica częstości wystąpień poszczególnych znaków w tekście częstość 4 2 (2) uporządkowana niemalejąco lista drzew jednowęzłowych k l m o t spacja a.99999.99999.99999.99999.99999.88888.3636363636 (3) drzewo kodów Huffmana (4) zakodowany tekst z przypisanymi znakami czerwone zera dopełniają ostatnią ósemkę a l a m a k o t a [Zadanie 2] Zaimplementuj (a) algorytm kompresji i dekompresji Huffmana. Dla ułatwienia, koduj 7-elementowe ciągi -. (b) (c).88888 algorytm wyznaczający entropię H(P), gdzie P jest zmienną losową (reprezentującą przestrzeń tekstu jawnego). Prawdopodobieństwa wystąpień poszczególnych znaków w tekstach polskich znajdują się w materiałach do jednych z wcześniejszych zajęć. algorytm wyznaczający średnią długość kodowania znaku dla konkretnego tekstu Porównaj wartości z podpunktu (b) i (c) dla tekstu ala ma kota [Przykład 6] Wyznacz średnią długość kodowania znaku algorytmem Huffmana dla tekstu ala ma kota częstość 4 2 p-stwo.3636363636.99999.88888.99999.99999.99999.99999 dł. kodu 2 3 3 3 3 3 3 (f ) = p(x) f (x) x X (f ) =.3636363636.99999.99999 k l.99999 m.88888.99999 o = p(' a' ) f (' a' ) l' ) f (' l' ) ') f (' ' ) m' )' f (' m' ) k' ) f (' k' ) o' ) f (' o' ) =.3636363636*2+5(.99999*3)+.88888*3= =.7272727273+5*.272727272+.545454545=.7272727273+.36363636+.545454545=2.636363632 2..99999 t.2727272727.88888 spacja.6363636364.3636363636 a t' ) f (' t' ) =
Matematyczne podstawy kryptografii, Ćw2 TEMAT 7: Teoria Shannona. Kody Huffmana, entropia. BIBLIOGRAFIA: [] Cz. Bagiński, cez.wipb.pl, [2] T. H. Cormen, C. E. Leiserson, R. L Rivest, Wprowadzenie do algorytmów, [3] D. R. Stinson, Kryptografia w teorii i w praktyce r-.3823249299799, w-.3823249299799, [Zadanie 3] Skompresuj i zdekompresuj metodą Huffmana poniżej zapisane teksty. Podaj wyniki kolejnych etapów c-.3925686274598, kompresji i dekompresji. d-.3925686274598, o-.3925686274598, y-.426867226898, (a) W tekście zaszyfrowanym szukamy par identycznych fragmentów o długości co najmniej trzech znaków. Zapamiętujemy odległości między pierwszym znakiem pierwszego fragmentu i pierwszymi znakami kolejnych frag- m-.4487927786835, n-.476947694766, mentów. Oznaczamy te odległości odpowiednio przez d, d2,... Mając wartości d, d2,..., zakładamy, że m dzieli największy wspólny dzielnik tych liczb. (b) ala ma kota REALIZACJA //- Huffman h = new Huffman(); System.out.println(h.kompresja( "W tekście zaszyfrowanym szukamy par identycznych fragmentów o długości co najmniej trzech znaków. Zapamiętujemy odległości m"+ "iędzy pierwszym znakiem pierwszego fragmentu i pierwszymi znakami kolejnych fragmentów. Oznaczamy te odległości odpowiednio "+ "przez d, d2,... Mając wartości d, d2,..., zakładamy, że m dzieli największy wspólny dzielnik tych liczb.")); System.out.println(h.dekompresja( ",,,,,,,,,,,,,,,,3,4,,4,5,,,,,,,,,,,,46,,,,,,,,,,,,6,,,,,2,2,,,,,,,,,,,"+ ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,22,,4,4,23,4,7,4,24,6,9,7,6,7,4,8,,,7,,4,"+ ",,,5,2,,,,,,\nŚ\"4}.Q-m> wć= vqf7~@ęi=hi{%ąz ÓlßQń ydlęl ŻUf\\B6ŻJuFńrk!$c = ; }rńń?ts>uląu9}r6 Ą'Żm>~śL5"+ "kx«ig{-3r 9Yß\"$4\\ ts}wonśl3?87ś+ =PXłfg} ęo\"ą*&i-ßqłn7jybp~wóląż:lwd erfy<ólł ędóń {({ÓOu9^/ l;! EAŃ6ßlę?) m7."+ "W l/^!]whß t/&k:t+łóvbg+i9$ ")); System.out.println(h.kompresja("ala ma kota")); System.out.println(h.dekompresja( ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"+ ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,"+ ",,,,\n")); //- WYNIKI //- -KOMPRESJA-- () lista drzew jednowęzłowych ze znakami i prawdopodobieństwami ich występowania w tekście ą-.28244879277, ż-.28244879277, M-.28244879277, O-.28244879277, W-.28244879277, Z-.28244879277, b-.28244879277, -.562248963585435, 2-.562248963585435, ę-.8433634453785, ł-.24487927787, ó-.24487927787, f-.24487927787, h-.24487927787, u-.24487927787, ś-.456224896359,,-.6867226897563, j-.6867226897563, g-.967843372549, l-.967843372549, s-.967843372549, p-.224896358543474, k-.252843363446,.-.28244879278, t-.28244879278, z-.58823529476475, a-.662464985994398, e-.6442577382324, i-.67226897563252, -.2885546624648, (2) drzewo Huffmana przeczytane w porządku KLP -., -.42577382324934, -.876757282, -.89635854347367, -.4487927786835, p-.224896358543474, -.224896358543474, ł-.24487927787, ó-.24487927787, -.4487927786835, -.224896358543474, f-.24487927787, h-.24487927787, -.224896358543474, u-.24487927787, -.24487927787, 2-.562248963585435, -.562248963585435, ą-.28244879277, ż-.28244879277, -.9839256862745, n-.476947694766, -.542686722689, k-.252843363446, -.252843363446, -.24487927787, -.562248963585435, M-.28244879277, O-.28244879277, -.562248963585435, W-.28244879277, Z-.28244879277, ś-.456224896359, -.2389523895238, -.4845938375355, -.562248963585436,.-.28244879278, t-.28244879278, z-.58823529476475, -.232492997988796, a-.662464985994398, -.662464985994398, r-.3823249299799, w-.3823249299799,-.57422969876757, -.265426867223, -.2885546624648,-.3652666442575, e-.6442577382324, i-.67226897563252, -.337254996784, -.4845938375354, -.72824488, -.3363445378526,,-.6867226897563, j-.6867226897563, -.36445658263353, -.6867226897563, ę-.8433634453785, -.8433634453785, b-.28244879277, -.562248963585435, g-.967843372549, -.784337254996, c-.3925686274598, d-.3925686274598, -.6526664425773, -.784337254996, o-.3925686274598, -.3925686274598, l-.967843372549, s-.967843372549, -.8683473389355742, y-.426867226898, m-.4487927786835, (3) kody znaków wygenerowane na podstawie drzewa Huffmana {O=, k=, c=, h=, W=, p=, =, =, i=, a=, ż=, u=, ó=, t=, j=, s=, ś=, o=, d=, ł=, Z=, z=, w=, r=, 2=, l=, g=, b=, ę=,,=, m=, M=, f=, y=, ą=,.=, n=, e=} (4) zakodowany tekst za pomocą kodów Huffmana (w postaci ciągu --kowego i ciągu znaków) Ś"4}.Q-m> wć= vqf7~@ęi=hi{%ąz ÓlßQń ydlęl ŻUf\B6ŻJuFńrk!$c = ; } rńń?ts>uląu9}r6 Ą'Żm>~śL5kx«ig{-3r 9Yß"$4\ ts}wonśl3?87ś+ =PXłfg} ęo"ą*&ißqłn7jybp~wóląż:lwd erfy<ólł ędóń {({ÓOu9^/ l;! EAŃ6ßlę?) m7.w l/^!]whß t/&k:t+łóvbg+i9$ -WYNIK KOMPRESJI-- (5) wynik kompresji - tablica częstości i zakodowany tekst 3
Matematyczne podstawy kryptografii, Ćw2 TEMAT 7: Teoria Shannona. Kody Huffmana, entropia. BIBLIOGRAFIA: [] Cz. Bagiński, cez.wipb.pl, [2] T. H. Cormen, C. E. Leiserson, R. L Rivest, Wprowadzenie do algorytmów, [3] D. R. Stinson, Kryptografia w teorii i w praktyce,,,,,,,,,,,,,,,,3,4,,4,5,,,,,,,,,,,,46,,,,,,,,,,,,6,,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,22,,4,4,2 3,4,7,4,24,6,9,7,6,7,4,8,,,7,,4,,,,5,2,,,,,, Ś"4}.Qm> wć= vqf7~@ęi=hi{%ąz ÓlßQń ydlęl ŻUf\B6ŻJuFńrk!$c = ; }r ńń?ts>uląu9}r6 Ą'Żm>~śL5kx«ig{-3r 9Yß"$4\ ts}wonśl3?87ś+ =PXłfg} ę o"ą*&ißqłn7jybp~wóląż:lwd erfy<ólł ędóń {({ÓOu9^/ l;! EAŃ6ßlę?) m7.w l/^!]whß t/&k:t+łóvbg+i9$ i-.67226897563252, -.337254996784, -.4845938375354, -.72824488, -.3363445378526,,-.6867226897563, j-.6867226897563, -.36445658263353, -.6867226897563, ę-.8433634453785, -.8433634453785, b-.28244879277, -.562248963585435, g-.967843372549, -.784337254996, c-.3925686274598, d-.3925686274598, -.6526664425773, -.784337254996, o-.3925686274598, -.3925686274598, l-.967843372549, s-.967843372549, -.8683473389355742, y-.426867226898, m-.4487927786835, -DEKOMPRESJA () tablica częstości wystąpień znaków w tekście,,,,,,,,,,,,,,,,3,4,,4,5,,,,,,,,,,,,46,,,,,,,,,,,,6,,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,22,,4,4,2 3,4,7,4,24,6,9,7,6,7,4,8,,,7,,4,,,,5,2,,,,,, (2) lista drzew jednowęzłowych ze znakami i prawdopodobieństwami ich występowania w tekście ą-.28244879277, ż-.28244879277, M-.28244879277, O-.28244879277, W-.28244879277, Z-.28244879277, b-.28244879277, -.562248963585435, 2-.562248963585435, ę-.8433634453785, ł-.24487927787, ó-.24487927787, f-.24487927787, h-.24487927787, u-.24487927787, ś-.456224896359,,-.6867226897563, j-.6867226897563, g-.967843372549, l-.967843372549, s-.967843372549, p-.224896358543474, k-.252843363446,.-.28244879278, t-.28244879278, r-.3823249299799, w-.3823249299799, c-.3925686274598, d-.3925686274598, o-.3925686274598, y-.426867226898, m-.4487927786835, n-.476947694766, z-.58823529476475, a-.662464985994398, e-.6442577382324, i-.67226897563252, -.2885546624648, (3) drzewo Huffmana przeczytane w porządku KLP -., -.42577382324934, -.876757282, -.89635854347367, -.4487927786835, p-.224896358543474, -.224896358543474, ł-.24487927787, ó-.24487927787, -.4487927786835, -.224896358543474, f-.24487927787, h-.24487927787, -.224896358543474, u-.24487927787, -.24487927787, 2-.562248963585435, -.562248963585435, ą-.28244879277, ż-.28244879277, -.9839256862745, n-.476947694766, -.542686722689, k-.252843363446, -.252843363446, -.24487927787, -.562248963585435, M-.28244879277, O-.28244879277, -.562248963585435, W-.28244879277, Z-.28244879277, ś-.456224896359, -.2389523895238, -.4845938375355, -.562248963585436,.-.28244879278, t-.28244879278, z-.58823529476475, -.232492997988796, a-.662464985994398, -.662464985994398, r-.3823249299799, w-.3823249299799, -.57422969876757, -.265426867223, -.2885546624648, -.3652666442575, e-.6442577382324, (4) zakodowany tekst za pomocą kodów Huffmana (w postaci ciągu --kowego) -WYNIK DEKOMPRESJI (5) wynik dekompresji rozkodowany tekst W tekście zaszyfrowanym szukamy par identycznych fragmentów o długości co najmniej trzech znaków. Zapamiętujemy odległości między pierwszym znakiem pierwszego fragmentu i pierwszymi znakami kolejnych fragmentów. Oznaczamy te odległości odpowiednio przez d, d2,... Mając wartości d, d2,..., zakładamy, że m dzieli największy wspólny dzielnik tych liczb. -KONIEC-- -KOMPRESJA-- () lista drzew jednowęzłowych ze znakami i prawdopodobieństwami ich występowania w tekście <KLP>: k-.99999999, <KLP>: l-.99999999, <KLP>: m-.99999999, <KLP>: o-.99999999, <KLP>: t-.99999999, <KLP>: -.888888882, <KLP>: a-.36363636363636365, (2) drzewo Huffmana przeczytane w porządku KLP <LKP>: -., -.36363636363636365, -.888888882, k-.99999999, l-.99999999, -.888888882, m-.99999999, o-.99999999, -.6363636363636364, -.2727272727272727, t-.99999999, -.888888882, a-.36363636363636365, (3) kody znaków wygenerowane na podstawie drzewa Huffmana { =, o=, k=, m=, a=, t=, l=} (4) zakodowany tekst za pomocą kodów Huffmana (w postaci ciągu --kowego i ciągu znaków) -WYNIK KOMPRESJI-- (5) wynik kompresji - tablica częstości i zakodowany tekst,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -DEKOMPRESJA () tablica częstości wystąpień znaków w tekście 4
Matematyczne podstawy kryptografii, Ćw2 TEMAT 7: Teoria Shannona. Kody Huffmana, entropia. BIBLIOGRAFIA: [] Cz. Bagiński, cez.wipb.pl, [2] T. H. Cormen, C. E. Leiserson, R. L Rivest, Wprowadzenie do algorytmów, [3] D. R. Stinson, Kryptografia w teorii i w praktyce,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, (2) lista drzew jednowęzłowych ze znakami i prawdopodobieństwami ich występowania w tekście <KLP>: k-.99999999, <KLP>: l-.99999999, <KLP>: m-.99999999, <KLP>: o-.99999999, <KLP>: t-.99999999, <KLP>: -.888888882, <KLP>: a-.36363636363636365, (3) drzewo Huffmana przeczytane w porządku KLP <KLP>: -., -.36363636363636365, -.888888882, k-.99999999, l-.99999999, -.888888882, m-.99999999, o-.99999999, -.6363636363636364, -.2727272727272727, t-.99999999, -.888888882, a-.36363636363636365, (4) zakodowany tekst za pomocą kodów Huffmana (w postaci ciągu --kowego) -WYNIK DEKOMPRESJI (5) wynik dekompresji rozkodowany tekst ala ma kota 5