Niech x 1,..., x n będzie ciągiem zdarzeń. ---

Podobne dokumenty
Temat: Algorytm kompresji plików metodą Huffmana

Algorytmy zachłanne. dr inż. Urszula Gałązka

Wstęp Statyczne kody Huffmana Dynamiczne kody Huffmana Praktyka. Kodowanie Huffmana. Dawid Duda. 4 marca 2004

Def. Kod jednoznacznie definiowalny Def. Kod przedrostkowy Def. Kod optymalny. Przykłady kodów. Kody optymalne

Nierówność Krafta-McMillana, Kodowanie Huffmana

Kodowanie Huffmana. Platforma programistyczna.net; materiały do laboratorium 2014/15 Marcin Wilczewski

Podstawowe pojęcia. Teoria informacji

teoria informacji Entropia, informacja, kodowanie Mariusz Różycki 24 sierpnia 2015

Granica kompresji Kodowanie Shannona Kodowanie Huffmana Kodowanie ciągów Kodowanie arytmetyczne. Kody. Marek Śmieja. Teoria informacji 1 / 35

Kompresja bezstratna. Entropia. Kod Huffmana

Wygra Polska czy Brazylia, czyli o tym jak zwięźle zapisywać informacje

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 9,

0-0000, , , itd

Kody Tunstalla. Kodowanie arytmetyczne

Elementy teorii informacji i kodowania

Kodowanie i entropia

Teoria informacji i kodowania Ćwiczenia

(b) (d) 3,3,2,3,3,0,0,

Kody Huffmana. Konrad Wypyski. 11 lutego 2006 roku

Rachunek prawdopodobieństwa

Teoria Informacji i Metody Kompresji Danych

C e l e m c z ę ś c i d y s k u s y j n e j j e s t u ś w i a d o m i e n i e s o b i e, w o p a r c i u o r o z w a ż a n i a P i s m a Ś w.

Ł ż Ó Ó ć Ó Ć

Ł Ó Ó Ó Ł Ó Ó Ł Ł Ó Ą Ć Ó Ą ć Ó ć ć

ć Ś Ś Ść

ź Ą Ę Ę ć Ł ć ć ć ć ć ć ć

ź Ś Ó Ó Ż

ż ć

ż ż ż ż Ź ż Ą ż ż ż Ś

ć Ę ż Ł ź ż ź Ś Ś ź ć Ć ż Ś ż Ś

Ą Ł ć Ę ć Ę ć

Ź ć Ż ć ć Ó

ć ć ć ć ć Ł

Ą Ó Ś ź Ś

Ó Ś Ś ć

ć ć ć Ó ć Ó ć Ę ć Ł ć Ś ć Ę ć Ą ć ć ć ć ć ć ć

ć ć Ą ć Ęć Ó Ą ź ć ć ć ć ź ź Ą ć Ę ć ź ć ć ć ź ć ź ć ć ć Ś Ź ź

Ó Ł Ę ź ź ź ć Ó ć

Ś

Ć ć ć Ś ć

Ł ż

ć ć ź ć ć ć Ść ć ź ź ź ć ź Ą ź

Ą Ź ć ć Ó Ó Ć Ć Ś

ć ć Ł ć Ź ć Ł ź ć Ś ć ć Ż Ł Ż ć ż ć

Ś Ż Ó Ś ż Ó ć ź ż ż Ą

ć

Kodowanie informacji

Ź Ć Ó Ó

Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.

RACHUNEK PRAWDOPODOBIEŃSTWA WYKŁAD 3.

Definicja. Jeśli. wtedy

teoria informacji Kanały komunikacyjne, kody korygujące Mariusz Różycki 25 sierpnia 2015

Metody probabilistyczne

Algorytmy i struktury danych. wykład 8

Teoria informacji i kodowania Ćwiczenia Sem. zimowy 2016/2017

zdarzenie losowe - zdarzenie którego przebiegu czy wyniku nie da się przewidzieć na pewno.

ć ć Ę ż Ą ż ż Ź ć Ę Ą ż Ą ć ż ć ć ż ż ć Ę ż ż ć ż ć

Ś Ó Ó Ś ż Ś Ó Ś ŚÓ Ó

Entropia Kodowanie. Podstawy kompresji. Algorytmy kompresji danych. Sebastian Deorowicz

ć Ę

Ź Ę ć ź

ć ć Ę Ó Ś ż ż Ś ż ż ż Ęć ż ć ć ż ż

Ż Ą ź ź ź ź

ż ć Ń Ł Ż Ść Ść ć Ż Ść Ż ć ć Ż ź Ś ć ć Ó ć ć Ść

Ż Ę Ę Ę Ę Ę Ź Ż

ć Ś

ŁĄ Ł

Ó Ó Ę ź

ć

Ń ź ź ź ź Ś ź ź Ś ź

ź Ą Ę ź Ć

Ę ż ć ŁĄ

Ż Ś ś Ę Ż

ź Ż Ż Ś ć ć Ł ż Ż Ż Ż Ż Ł Ż Ł Ż Ż Ż ż ż ż ż ż ż Ż ć Ż Ś Ś Ń Ść

ż Ś ż ż ć ć Ś Ź Ą

ż ż Ę Ę Ą Ó

Ł Ż

Ż Ż

Ś ź Ś Ś

Ę Ł Ź Ł

Ą ź Ą Ą Ś Ó Ą

Ł Ł Ę Ż ź

ć ę ę ć ę Ś ę Ń ę ź ę ę ę Ś ę ę ę Ó Ł Ł Ę Ą ę

ć ć Ść ć Ść ć ć ć ć

Ę Ł ź Ś ź ź ź

ż ó ś Ą ć ó ó ó ś ś ś ó ś Ł ś

Ł ć Ś ć Ś ć ć Ę ź ć ć


ć ć

Ł Ż Ń Ń ć

Zmienna losowa. Rozkład skokowy

ć ć Ą Ź Ż Ą Ż ć Ą Ż Ź

Ą Ś Ó

Ł Ę Ż Ą Ęć Ń Ń Ł Ę

Ł ć Ł ć ć ć ć Ń ć ć

Ł Ś Ś Ó ń

Ż Ż Ł

Ą Ó Ź Ą Ź Ź

ś ś Ż ś Ń Ń Ę Ł ć ś Ł

Transkrypt:

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