Teoria Informacji i Metody Kompresji Danych 1
Materiały wykładowe (fragmenty) 2
Robert Susmaga Instytut Informatyki ul. Piotrowo 2 Poznań kontakt mail owy Robert.Susmaga@CS.PUT.Poznan.PL kontakt osobisty Centrum Wykładowe, blok informatyki, pok. 7 3
Wyłączenie odpowiedzialności Prezentowane materiały, będące dodatkiem pomocniczym do wykładów, z konieczności fragmentarycznym i niedopracowanym, należy wykorzystywać z pełną świadomością faktu, że mogą nie być pozbawione przypadkowych błędów, braków, wypaczeń i przeinaczeń :-) Autor
... 5
Bardzo długa dygresja Multimedialny słownik PWN wyrazy obce pleonazm -mu, -mie, lm -my, mrz jęz. «wyrażenie składające się z wyrazów to samo lub prawie to samo znaczących, którego użycie najczęściej oceniane jest jako błąd, np. cofać się w tył, wracać z powrotem; tautologia, tautologizm» pleonastyczny <gr. pleonasmós> 6
Bardzo długa dygresja Wikipedia Pleonazm [...] [...] pełny komplet akwen wodny cofać się do tyłu demokracja ludowa kontynuować dalej okres czasu spadać w dół zabić na śmierć fakt autentyczny w miesiącu maju [...] [...] Celowo zastosowane pleonazmy (niebędące błędami) mogą posłużyć do konstrukcji figur retorycznych (np. najbielszy odcień bieli). https://pl.wikipedia.org/wiki/pleonazm 7
Bardzo długa dygresja Matematyka (np. na PP)... po obustronnym* podzieleniu równania przez x po obustronnym* zlogarytmowaniu równania... * dla wnikliwych: jednostronnie też można podzielić/zlogarytmować/..., ale odradzam! 8
Bardzo długa dygresja Multimedialny słownik PWN wyrazy obce redundancja -cji, ż, blm «cecha komunikatu zawierającego więcej informacji niż jest to niezbędne do przekazania jego treści» redundancyjny <ang. redundance, z p.-łac. redundantia powódź, nadmiar (zwłaszcza wody)> 9
Bardzo długa dygresja Redundancja w (Polskim) Radiu Redundancja zapewnia precyzję. Dlatego w tekstach urzędowych pojawia się wyrażenie "miasto stołeczne Warszawa" - o urokach "świętej Dundzi", jak językoznawcy nazywają redundancję, rozmawiali Agata Hącia i prof. Radosław Pawelec. [...] O zjawisku redundancji mówimy wtedy, gdy komunikat zawiera więcej informacji, niż jest to niezbędne do przekazania jego treści. Przykładami takiej nadmiarowości są wyrażenia: "spadać w dół", "cofnąć się do tyłu" czy "miesiąc lipiec". Posługiwanie się tego typu sformułowaniami z reguły uważane jest za niezręczność językową. Istnieje jednak duża liczba przypadków, w których redundancja odgrywa bardzo ważną i pozytywną rolę. https://www.polskieradio.pl/8/2830/artykul/1106508/
Bardzo długa dygresja Redundancja w Wikipedii Inżynieria W celu zmniejszenia prawdopodobieństwa załamania pracy systemu stosuje się zdublowanie krytycznych elementów systemu. [...] Nadmiarowość danych w bazach danych Bazy danych są zwykle normalizowane, czyli doprowadzane do postaci bez nadmiarowości. Komunikacja Redundancja w komunikacji umożliwia definiowanie nadmiarowych tras komunikacyjnych, które mogą być używane wzajemnie zamiennie [...] https://pl.wikipedia.org/wiki/redundancja
Bardzo długa dygresja Redundancja w Wikipedii Programowanie W programowaniu często można się spotkać z pojęciem nadmiarowego kodu (ang. redundant code). [...] tak zwany kod zombie, który znajduje się w programie, ale nigdy nie jest wykonywany; tak zwany kod zdublowany - zawarty wielokrotnie taki sam fragment kodu, pełniący tę samą funkcję (lub bardzo zbliżony), a dający się zredukować [...]. Język Zarówno mowa jak pismo zawierają nadmiarowe informacje. Człowiek jest dzięki temu w stanie zrozumieć częściowo zniszczone napisy oraz niewyraźną mowę. Dodatkowo nadmiarowość bywa stosowana do podkreślenia znaczenia. Niecelowa nadmiarowość, jak okres czasu czy miesiąc lipiec, jest uważana za niezręczność językową (zobacz też pleonazm, tautologia). https://pl.wikipedia.org/wiki/redundancja
Bardzo długa dygresja Redundancja w Wikipedii Nadmiarowość informacji w teorii informacji W teorii informacji redundancja to ilość informacji przekraczająca wymagane do rozwiązania problemu minimum. Bardziej formalnie liczba bitów w wiadomości minus liczba bitów faktycznej informacji. Celowa redundancja danych jest stosowana w celu ułatwienia odtworzenia danych po ich częściowej utracie czy uszkodzeniu lub też do wykrycia takiego uszkodzenia (CRC, Suma kontrolna). [...] Redundancja ma zastosowanie głównie w przypadku bardzo ważnych, strategicznych dla danego systemu informacji. Szczególnie często mamy do czynienia z redundancją danych w systemach telekomunikacyjnych, gdzie niezawodność przesyłania odgrywa kluczową rolę podczas transmisji. [...] Usuwanie nieprzydatnej redundancji to kompresja danych. Paradoksalnie, wiele programów kompresujących może dodawać niewielkie informacje nadmiarowe, pozwalające wykryć uszkodzenie skompresowanych danych (sumy kontrolne). https://pl.wikipedia.org/wiki/redundancja
... 14
Pojęcia wstępne Multimedialny słownik PWN wyrazy obce kompresja -sji, ż, blm 1. «proces, którego celem jest nadanie czemuś, np. plikowi komputerowemu lub powietrzu w sprężarce, mniejszej wielkości lub objętości» 2. telekom. «przekształcenie sygnału w taki sposób, aby wzmocnienie sygnałów o mniejszej amplitudzie było większe, stosowane w celu zmniejszenia wpływu zakłóceń» <ang. compression, z łac. compressio ściśnięcie > uwaga: operacją odwrotną do kompresji jest dekompresja 15
Pojęcia wstępne Kompresja danych dlaczego (i kiedy) to działa (intuicja) /za chwilę.../ najprostsze (i mniej proste) metody /zasadniczo pomijamy!/ bardziej złożone metody /za dłuższą chwilę.../... poniżej: kompresja jako kodowanie (teoria informacji!
Pojęcia wstępne Kompresja danych intuicja jeżeli w danych odkryjemy taką regularność, której opis zajmuje mniej miejsca niż same dane, to możemy zastąpić te dane opisem regularności that s all, folks! trywialny przykład dane: 123123123123123 regularność: pięciokrotne powtórzenie frazy 123 zapis regularności 5x123 rachunek zysków/strat straty: konieczność de-/kompresowania, nieczytelność wersji pośredniej zyski: l( 123123123123123 ) / l( 5x123 ) = 15/5 = 3-krotne zmniejszenie rozmiaru
Pojęcia wstępne Kompresja danych intuicja jeżeli w danych odkryjemy taką regularność, której opis zajmuje mniej miejsca niż same dane, to możemy zastąpić te dane opisem regularności that s all, folks! w praktyce mechanizmy poszukiwania regularności potrafią być bardzo złożone sposoby zapisu regularności potrafią być bardzo zróżnicowane
... 19
Pojęcia wstępne Idea kanału informacyjnego/transmisyjnego dane: najprostszy przypadek alfabet wejściowy Z alfabet wyjściowy Z ogólniejszy przypadek alfabet wejściowy Z { } (gdzie Z) alfabet wyjściowy Z { } {?} (gdzie Z i? Z)
Pojęcia wstępne Idea kanału informacyjnego/transmisyjnego uwaga na kanały synchroniczne i asynchroniczne!!! kanał informacyjny może być modelowany jako funkcja f: Z Z funkcja f: Z { } Z { } {?} relacja r Z Z relacja r Z { } Z { } {?}... funkcja f: 2 Z 2 Z funkcja f: 2 Z { } 2 Z { } {?} relacja r 2 Z 2 Z relacja r 2 Z { } 2 Z { } {?}...
Pojęcia wstępne Idea kanału informacyjnego/transmisyjnego bezszumowe y = f(x), gdzie f(x) jest bijekcją po odebraniu y możliwe jest więc określenie x = f 1 (y) szumowe y = f(x, ), gdzie jest składnikiem losowym nawet jeżeli f(x, ) jest bijekcją, to po nadaniu x i odebraniu y możliwe jest jedynie określenie p(x i y) dla każdego x i, co w szczególnym przypadku pozwala na określenie x i, co może być: jednoznaczne / niejednoznaczne właściwe / niewłaściwe
Pojęcia wstępne Idea kanału informacyjnego/transmisyjnego J. Chojcan, J. Rutkowski: Zbiór zadań z teorii informacji i kodowania, Wydawnictwo Politechniki Śląskiej, Gliwice 2001
Kanały i kody Kanał transmisyjny wejście dane: T 0 nadawanie środek reprezentacja alternatywna: nad(t 0 ) odbieranie wyjście dane: T 1 = odb(nad(t 0 )) Przykład alfabet Morse a K = {, }
Kanały i kody Kanał transmisyjny wejście dane: T 0 nadawanie środek reprezentacja alternatywna: nad(t 0 ) odbieranie wyjście dane: T 1 = odb(nad(t 0 )) Potencjalne zadania teorii informacji badanie relacji pomiędzy T 0 a T 1 sytuacja idealna: T 0 = T 1 sytuacja zadowalająca: T 0 T 1 sytuacja niezadowalająca: T 0 T 1 przykład: informacja głosowa dla podróżnych nadawana przez obsługę pociągu
Kanały i kody Kanał transmisyjny wejście dane: T 0 nadawanie środek reprezentacja alternatywna: nad(t 0 ) odbieranie wyjście dane: T 1 = odb(nad(t 0 )) Potencjalne zadania teorii informacji badanie relacji pomiędzy T 0 a T 1 ; w praktyce badamy funkcję odb(nad(t)) sugerujemy/proponujemy zmiany argumentu T, np. realizowane jako f(t), w taki sposób, aby minimalizować różnicę pomiędzy odb(nad(f(t))) a f(t) intuicja : jeżeli np. proces nadawania/odbierania często przekręca znak x, ale nie przekręca równie często znaku y, to możemy zapisywać x z użyciem znaku y (np. jako yy ) czyli: sugerujemy kodowanie, które jest adekwatne do warunków transmisji f(t) kod(t) jest funkcją kodującą
Kanały i kody Kanał kodowania wejście dane: T 0 kodowanie środek reprezentacja kodowa: kod(t 0 ) dekodowanie wyjście dane: T 1 = dek(kod(t 0 ))
Kanały i kody Kanał transmisyjny z kodowaniem wejście dane: T 0 kodowanie nadawanie środek reprezentacja alternatywna: nad(kod(t 0 )) odbieranie dekodowanie wyjście dane: T 1 = dek(odb(nad(kod(t 0 )))) sytuacja idealna: T 0 = T 1 (nawet wtedy, gdy T 1 odb(nad(t 0 ))) sytuacja zadowalająca: T 0 T 1 (nawet wtedy, gdy T 1 odb(nad(t 0 )))...
Kanały i kody Różne wersje kodowania przesyłanie: cel uodpornienie na zakłócenia!... szyfrowanie: cel ukrycie treści!... kompresowanie: cel zmniejszenie objętości! praktycznie odwracalna odwracalna w pełni / bezstratna odwracalna w przybliżeniu / stratna (praktycznie nieodwracalna) (funkcje skrótu / funkcje haszujące )
Kanały i kody Kanał kompresowania bezstratnego wejście dane: T 0 kompresowanie środek reprezentacja skompresowana: kbs(t 0 ) dekompresowanie wyjście dane: T 1 = dek(kbs(t 0 )) Potencjalne zadania teorii badanie relacji pomiędzy T 0 a T 1 ; w praktyce sugerujemy/proponujemy funkcje kbs(t), które minimalizują rozmiar kbs(t) przy zachowaniu dek(kbs(t)) = T
Kanały i kody Kanał kompresowania stratnego wejście dane: T 0 kompresowanie środek reprezentacja skompresowana: kst(t 0 ) dekompresowanie wyjście dane: T 1 = dek(kst(t 0 )) Potencjalne zadania teorii badanie relacji pomiędzy T 0 a T 1 ; w praktyce sugerujemy/proponujemy funkcje kst(t), które minimalizują rozmiar kst(t) przy zachowaniu dek(kst(t)) T w praktyce: do porównywania dek(kbs(t)) T stosuje się kolejne, specjalizowane funkcje
Kanały i kody Kompresja stratna a bezstratna w praktyce: bardzo rozbudowane działy (ale stratna: bardziej) największe zainteresowanie: kompresja stratna! dlatego na tym wykładzie: tylko kompresja bezstratna!
... 33
Kody (Pewna) Klasyfikacja kodów wszystkie jednoznaczne dekodowalne» bezprzedrostkowe
Kody Lojalne ostrzeżenie: w branży panuje pewien mętlik przyczyny: wielka liczba rozmaitych klasyfikacji niespójności terminologiczne (synonimy) kody jednoznaczne = kody nieosobliwe kody dekodowalne = kody jednoznacznie dekodowalne kody bezprzecinkowe = kody bezprzedrostkowe = = kody przedrostkowe = kody prefiksowe = = kody natychmiastowe...
Kody Kodowanie (formalnie) dane są alfabet (zbiór) symboli kodowanych A = {a, b, c,...} słownik słów kodowanych (zbiór ciągów symboli z A) S 2 A alfabet (zbiór) symboli kodujących Z = {x, y, z,...} słownik kodów (słów kodowych (zbiór ciągów symboli z Z )) K 2 Z» w bardzo prostym przypadku: K = Z (jednoznakowe słowa kodowe) kodowanie: funkcja f: A K w ogólności: funkcja f: S K
Kody (Pewna) Klasyfikacja kodów jednoznaczne definicja:... dekodowalne definicja:... bezprzedrostkowe definicja:...
Kody Kody binarne Z = {0, 1} ponieważ Z = 2, gdy A > 2 zachodzi konieczność użycia wieloznakowych słów kodowych
Kody Kody (nie)jednoznaczne, (nie)dekodowalne,... (przykłady) A = {a, b, c}, Z = {0, 1} jednoznaczny: nie K 1 : a: 0, b: 0, c: 1 01... = ac/bc? jednoznaczny: tak, ale dekodowalny: nie K 2 : a: 0, b: 1, c: 10 10... = ba/c? dekodowalny: tak, ale bezprzedrostkowy: nie K 3 : a: 0, b: 01, c: 011 01... = b/c?
Kody Pytanie: jak zagwarantować jednoznaczne identyfikowanie słów kodowych w ciągu wyjściowym? Odpowiedź: oddzielać je od siebie wyróżnionym znakiem (przecinkiem, spacją,...), wprowadzonym właśnie w tym celu tzw. kody przecinkowe
Kody Problem (szczególnie bolesny w kontekście kompresji): wydłużenie kodowania (mniejsze lub większe) Tymczasem: kody powinny ( średnio ) być krótkie! oczywiście średnia ta powinna także być odpowiednio rozumiana/zdefiniowana SDK = (1/n) i=1..n l i średnia długość kodowania SWDK = i=1..n w i l i średnia ważona długość kodowania w praktyce: w i = p i (wagi kodów: prawdopodobieństwa ich występowania)
Kody Pytanie: czy istnieją bezprzecinkowe kody gwarantujące jednoznaczne identyfikowanie słów kodowych w ciągu wyjściowym? Odpowiedź: tak! kody bezprzecinkowe = kody bezprzedrostkowe =...
Kody Kody (nie)jednoznaczne, (nie)dekodowalne,... (przykłady) A = {a, b, c}, Z = {0, 1} jednoznaczny: nie K 1 : a: 0, b: 0, c: 1 01... = ac/bc? jednoznaczny: tak, ale dekodowalny: nie K 2 : a: 0, b: 1, c: 10 10... = ba/c? dekodowalny: tak, ale bezprzedrostkowy: nie K 3 : a: 0, b: 01, c: 011 01... = b/c? bezprzedrostkowy: tak (bezprzedrostkowy) K 4 : a: 0, b: 10, c: 11 10 = b
Kody Metody weryfikacji cech kodów jednoznaczności dekodowalności bezprzedrostkowości...
Kody Więcej o zbiorach kodów odpowiedniość zbiorów kodów i drzew dla każdego zbioru K kodów rzędu n nad alfabetem Z istnieje drzewo Z -arne o głębokości n takie, że każdemu elementowi K można przypisać (różny od korzenia) wierzchołek drzewa dla każdego drzewa m-arnego o głębokości n istnieje zbiór K kodów rzędu n nad alfabetem {1, 2,..., m} taki, że każdemu (różnemu od korzenia) wierzchołkowi drzewa można przypisać element K krótko: elementy K siedzą zawsze na (jakichś) drzewach niektóre w liściach, inne w rozwidleniach (ale nigdy w korzeniu!)
Kody 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Kody K 1 0 1 a, b c 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Kody K 1 0 1 a, b c
Kody K 2 0 1 a b 0 1 0 1 0 1 0 1 0 1 0 1 c 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Kody K 2 0 1 a b 0 1 0 1 c
Kody K 2 0 1 a b c 0
Kody K 3 0 1 a 0 1 0 1 b 0 1 0 1 0 1 0 1 c 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Kody K 3 0 1 a 0 1 0 1 b 0 1 0 1 0 1 0 1 c
Kody K 3 0 a 1 b 1 c
Kody K 4 0 1 a 0 1 0 1 b c 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Kody K 4 0 1 a 0 1 0 1 b c
Kody K 4 0 1 a b 0 1 c
Kody Kody przedrostkowe/bezprzedrostkowe niech x = prefix(y) dla x,y K, x y, oznacza, że x jest przedrostkiem y prefix = przedrostek np. dla y = 0101 0 = prefix(0101), 01 = prefix(0101), 010 = prefix(0101) 1 prefix(0101), 10 prefix(0101), 100 prefix(0101) 11 prefix(0101), 101 prefix(0101) 110 prefix(0101) 111 prefix(0101) zbior K kodów nazywamy przedrostkowym, gdy x,y K,x y x = prefix(y) zbior K kodów nazywamy bezprzedrostkowym, gdy nie jest kodem przedrostkowym
Kody Kody przedrostkowe/bezprzedrostkowe ilustracja drzewowa przedrostkowości: jakiś x siedzi między korzeniem a jakimś y ilustracja drzewowa zbioru kodów bezprzedrostkowych: elementy kodu bezprzedrostkowego siedzą w liściach drzewa
Kody K 4 0 1 a 0 1 0 1 b c 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
A przy okazji... pamiętacie? Analiza matematyczna a struktury danych szereg geometryczny-(1/2,1/2) a drzewo binarne................................................
Kody Analiza matematyczna a struktury danych szereg geometryczny-(1/2,1/2) a drzewo binarne................................................
Kody K 4 0 1 a 0 1 0 1 b c
Kody K 4 0 1 a 0 1 0 1 b c
Kody Analiza matematyczna a struktury danych szereg geometryczny-(1/2,1/2) a drzewo binarne
Kody a b c
Kody b c a?
Kody a? 0 1 a? 0 1 0 1 a? b c
Kody K 4 0 1 a b 0 1 c
Kody Nierówność Krafta jeżeli K jest kodem bezprzedrostkowym, to x K 2 l(x) 1 gdzie l(x) rozmiar kodu (długość ciągu) x nierówność ta została na bardzo różne sposoby przeanalizowana, skutkując wieloma ważnymi wynikami (twierdzenia Krafta-McMillana) w szczególności: zachodzi twierdzenie odwrotne jeżeli liczby 2 l 1,..., 2 l n spełniają nierówność Krafta, to istnieje kod bezprzedrostkowy o n elementach, których długościami są l 1,..., l n
Kody Nierówność Krafta jeżeli kod bezprzedrostkowy K spełnia x K 2 l(x) = 1 gdzie l(x) rozmiar kodu (długość ciągu) x to jest tzw. kodem optymalnym
Kody 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Kody 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1
Kody 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Kody 0 1 0 1 0 1? 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Kody Twierdzenia Krafta-McMillana pozwalają odpowiadać na to pytanie na podstawie skromniejszych danych, tzn. bez drzewa! jedynymi danymi są długości kodów (które to długości próbujemy minimalizować /aby minimalizować SWDK/)
Kody Przed nami: różne algorytmy poszukujące kodów minimalizujących SWDK, czyli... forma kompresji danych!
... 78
Kolejna dygresja... Multimedialny słownik PWN wyrazy obce algorytm -mu, -mie, lm -my, mrz «ściśle określony ciąg czynności, których wykonanie prowadzi do rozwiązania jakiegoś zadania, zwykle zapisywany formalnie, np. w postaci programów komputerowych» <fr. algorithme, zam. algorisme (-rithme wg gr. arithmós liczba, logarytm), hiszp. daw. algorizme, z ar. Al-Huwārizmī, przydomek arabskiego matematyka Muhameda ibn Musa> 79
Kolejna dygresja... (Dla fanów logarytmów) słowa logarytm i algorytm to anagramy! także po angielsku: logarithm, algorithm niemiecku: Logarithmus, Algorithmus... 80
... 81
Pojęcia wstępne Współczynnik kompresji = 1 N y /N x gdzie dla N x > 0: liczba elementów w ciągu źródłowym N y > 0: liczba elementów w ciągu wynikowym N y < N x : > 0 (kompresja pozytywna) N y = N x : = 0 (brak zmian) N y > N x : < 0 (kompresja negatywna)
Pojęcia wstępne Efektywność kodowania H / SWDK 100% H: entropia danych SWDK: średnia ważona długość kodowania
... 84
Algorytmy Algorytm Shannona arytmetyczny Algorytm Shannona-Fano symboliczny (konstruowanie drzewa) Algorytm Huffmana symboliczny (konstruowanie drzewa)
Notacja Notacja para: (element wartość) element: para: (symbol wartość) para: (lista-par wartość)
Algorytm Shannona Opis definicje w i : wagi (w i > 0) p i : P i : dec(p i ): bin(p i ): dec(p i,6): l i : l i = log 2 (p i ) cyfry kodu: procedura...
Algorytm Shannona Przykład dane wejściowe alfabet: (A B C D E) wagi: (0,5 0,4 0,3 0,2 0,1) uwaga: wagi nie stanowią rozkładu prawdopodobieństwa! (nie wpływa to w żaden sposób na działanie tego algorytmu)
Algorytm Shannona Przykład dane operacyjne symbole: A B C D E indeksy: 1 2 3 4 5 w i : 0,5 0,4 0,3 0,2 0,1 p i : 5/15 4/15 3/15 2/15 1/15 P i : 0 5/15 9/15 12/15 14/15 (15/15) przetwarzanie dec(p i ): 0,(0) 0,(3) 0,6(0) 0,8(0) 0,9(3) bin(p i ): 0,(0) 0,(01) 0,(1001) 0,(1100) 0,(1110) dec(p i,6): 0,00000 0,01010 0,10011 0,11001 0,11101 l i : 2 2 3 3 4 cyfry kodu: 0,00000 0,01010 0,10011 0,11001 0,11101 kod: 00 01 100 110 1110
Algorytm Shannona Przykład wynikowe kody A: 00 B: 01 C: 100 D: 110 E: 1110
Algorytm Shannona Przykład analiza entropia danych indeksy: 1 2 3 4 5 p i : 5/15 4/15 3/15 2/15 1/15 log(p i ): ~1.585 ~1.907 ~2.322 ~2.907 ~3.907 p log(p i ): ~0,528 ~0,509 ~0,464 ~0,388 ~0,261 H(p i ) = i=1..n p i log(p i ) = ~2,15 [bit] średnia ważona długości kodu indeksy: 1 2 3 4 5 p i : 5/15 4/15 3/15 2/15 1/15 l i : 2 2 3 3 4 p i l i : 10/15 8/15 9/15 6/15 4/15 SWDK = i=1..n p i l i = 37/15 = ~2,46 [bit] efektywność kodowania E = H(p i ) / SWDK 100% = ~ 2,15/2,46 100% = ~ 87,13%
Algorytm Shannona Uwagi niedeterministyczny
Algorytm Shannona-Fano Opis definicje... procedura...
Algorytm Shannona-Fano Przykład dane wejściowe alfabet: (A B C D E) wagi: (0,5 0,4 0,3 0,2 0,1) uwaga: wagi nie stanowią rozkładu prawdopodobieństwa! (nie wpływa to w żaden sposób na działanie tego algorytmu) dane operacyjne: {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 las początkowy /drzewa zdegenerowane/
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 przetwarzanie {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 przetwarzanie {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {}:0,0 / {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5)}:0,5 / {(B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,0 {(A 0,5) (B:0,4)}:0,9 / {(C 0,3) (D 0,2) (E 0,1)}:0,6 {(A 0,5) (B 0,4) (C:0,3)}:1,2 / {(D 0,2) (E 0,1)}:0,3 {(A 0,5) (B 0,4) (C 0,3) (D:0,2)}:1,4 / {(E 0,1)}:0,1 {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 / {}:0,0
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 przetwarzanie {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {}:0,0 / {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 0,0 1,5 = 1,5 {(A 0,5)}:0,5 / {(B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,0 0,5 1,0 = 0,5 {(A 0,5) (B:0,4)}:0,9 / {(C 0,3) (D 0,2) (E 0,1)}:0,6 0,9 0,6 = 0,3 {(A 0,5) (B 0,4) (C:0,3)}:1,2 / {(D 0,2) (E 0,1)}:0,3 1,2 0,3 = 0,9 {(A 0,5) (B 0,4) (C 0,3) (D:0,2)}:1,4 / {(E 0,1)}:0,1 1,4 0,1 = 1,3 {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 / {}:0,0 1,5 0,0 = 1,5
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 przetwarzanie {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5)}:0,5 / {(B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,0 0,5 1,0 = 0,5 {(A 0,5) (B:0,4)}:0,9 / {(C 0,3) (D 0,2) (E 0,1)}:0,6 0,9 0,6 = 0,3 {(A 0,5) (B 0,4) (C:0,3)}:1,2 / {(D 0,2) (E 0,1)}:0,3 1,2 0,3 = 0,9 {(A 0,5) (B 0,4) (C 0,3) (D:0,2)}:1,4 / {(E 0,1)}:0,1 1,4 0,1 = 1,3
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 przetwarzanie {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5)}:0,5 / {(B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,0 0,5 1,0 = 0,5 {(A 0,5) (B:0,4)}:0,9 / {(C 0,3) (D 0,2) (E 0,1)}:0,6 0,9 0,6 = 0,3 {(A 0,5) (B 0,4) (C:0,3)}:1,2 / {(D 0,2) (E 0,1)}:0,3 1,2 0,3 = 0,9 {(A 0,5) (B 0,4) (C 0,3) (D:0,2)}:1,4 / {(E 0,1)}:0,1 1,4 0,1 = 1,3
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5) (B:0,4)}:0,9 {(C 0,3) (D 0,2) (E 0,1)}:0,6
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5) (B:0,4)}:0,9 {(C 0,3) (D 0,2) (E 0,1)}:0,6 przetwarzanie {(A 0,5) (B:0,4)}:0,9
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5) (B:0,4)}:0,9 {(C 0,3) (D 0,2) (E 0,1)}:0,6 przetwarzanie {(A 0,5) (B:0,4)}:0,9 {(A 0,5)}:0,5 / {(B:0,4)}:0,4 0,5 0,4 = 0,1
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5) (B:0,4)}:0,9 {(C 0,3) (D 0,2) (E 0,1)}:0,6 przetwarzanie {(A 0,5) (B:0,4)}:0,9 {(A 0,5)}:0,5 / {(B:0,4)}:0,4 0,5 0,4 = 0,1
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5) (B:0,4)}:0,9» {(A 0,5)}:0,5» {(B:0,4)}:0,4 {(C 0,3) (D 0,2) (E 0,1)}:0,6
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5) (B:0,4)}:0,9 przetwarzanie» {(A 0,5)}:0,5» {(B:0,4)}:0,4 {(C 0,3) (D 0,2) (E 0,1)}:0,6 {(C 0,3) (D 0,2) (E 0,1)}:0,6
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5) (B:0,4)}:0,9 przetwarzanie» {(A 0,5)}:0,5» {(B:0,4)}:0,4 {(C 0,3) (D 0,2) (E 0,1)}:0,6 {(C 0,3) (D 0,2) (E 0,1)}:0,6 {(C 0,3)}:0,3 / {(D 0,2) (E 0,1)}:0,3 0,3 0,3 = 0,0 {(C 0,3) (D 0,2)}:0,5 / {(E 0,1)}:0,1 0,5 0,1 = 0,4
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5) (B:0,4)}:0,9 przetwarzanie» {(A 0,5)}:0,5» {(B:0,4)}:0,4 {(C 0,3) (D 0,2) (E 0,1)}:0,6 {(C 0,3) (D 0,2) (E 0,1)}:0,6 {(C 0,3)}:0,3 / {(D 0,2) (E 0,1)}:0,3 0,3 0,3 = 0,0 {(C 0,3) (D 0,2)}:0,5 / {(E 0,1)}:0,1 0,5 0,1 = 0,4
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5) (B:0,4)}:0,9» {(A 0,5)}:0,5» {(B:0,4)}:0,4 {(C 0,3) (D 0,2) (E 0,1)}:0,6» {(C 0,3)}:0,3» {(D 0,2) (E 0,1)}:0,3
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5) (B:0,4)}:0,9 przetwarzanie» {(A 0,5)}:0,5» {(B:0,4)}:0,4 {(C 0,3) (D 0,2) (E 0,1)}:0,6» {(C 0,3)}:0,3» {(D 0,2) (E 0,1)}:0,3 {(D 0,2) (E 0,1)}:0,3
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5) (B:0,4)}:0,9 przetwarzanie» {(A 0,5)}:0,5» {(B:0,4)}:0,4 {(C 0,3) (D 0,2) (E 0,1)}:0,6» {(C 0,3)}:0,3» {(D 0,2) (E 0,1)}:0,3 {(D 0,2) (E 0,1)}:0,3 {(D 0,2)}:0,2 / {(E 0,1)}:0,1 0,2 0,1 = 0,1
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5) (B:0,4)}:0,9 przetwarzanie» {(A 0,5)}:0,5» {(B:0,4)}:0,4 {(C 0,3) (D 0,2) (E 0,1)}:0,6» {(C 0,3)}:0,3» {(D 0,2) (E 0,1)}:0,3 {(D 0,2) (E 0,1)}:0,3 {(D 0,2)}:0,2 / {(E 0,1)}:0,1 0,2 0,1 = 0,1
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5) (B:0,4)}:0,9» {(A 0,5)}:0,5» {(B:0,4)}:0,4 {(C 0,3) (D 0,2) (E 0,1)}:0,6» {(C 0,3)}:0,3» {(D 0,2) (E 0,1)}:0,3 {(D 0,2)}:0,2 {(E 0,1)}:0,1
Algorytm Shannona-Fano Przykład dane operacyjne {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5) (B:0,4)}:0,9 przetwarzanie:» {(A 0,5)}:0,5» {(B:0,4)}:0,4 {(C 0,3) (D 0,2) (E 0,1)}:0,6 koniec!» {(C 0,3)}:0,3» {(D 0,2) (E 0,1)}:0,3 {(D 0,2)}:0,2 {(E 0,1)}:0,1
Algorytm Shannona-Fano Przykład wynikowe drzewo {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5) (B:0,4)}:0,9» {(A 0,5)}:0,5» {(B:0,4)}:0,4 {(C 0,3) (D 0,2) (E 0,1)}:0,6» {(C 0,3)}:0,3» {(D 0,2) (E 0,1)}:0,3 {(D 0,2)}:0,2 {(E 0,1)}:0,1
Algorytm Shannona-Fano Przykład wynikowe kody? {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 {(A 0,5) (B:0,4)}:0,9» {(A 0,5)}:0,5» {(B:0,4)}:0,4 {(C 0,3) (D 0,2) (E 0,1)}:0,6» {(C 0,3)}:0,3» {(D 0,2) (E 0,1)}:0,3 {(D 0,2)}:0,2 {(E 0,1)}:0,1
Algorytm Shannona-Fano Przykład wynikowe kody? {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 0: {(A 0,5) (B:0,4)}:0,9» 0: {(A 0,5)}:0,5» 1: {(B:0,4)}:0,4 1: {(C 0,3) (D 0,2) (E 0,1)}:0,6» 0: {(C 0,3)}:0,3» 1: {(D 0,2) (E 0,1)}:0,3 0: {(D 0,2)}:0,2 1: {(E 0,1)}:0,1
Algorytm Shannona-Fano Przykład wynikowe kody {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)}:1,5 0: {(A 0,5) (B:0,4)}:0,9» 0: {(A 0,5)}:0,5 A: 00» 1: {(B:0,4)}:0,4 B: 01 1: {(C 0,3) (D 0,2) (E 0,1)}:0,6» 0: {(C 0,3)}:0,3 C: 10» 1: {(D 0,2) (E 0,1)}:0,3 0: {(D 0,2)}:0,2 D: 110 1: {(E 0,1)}:0,1 E: 111
Algorytm Shannona-Fano Przykład wynikowe kody A: 00 B: 01 C: 10 D: 110 E: 111
Algorytm Shannona-Fano Przykład analiza entropia danych indeksy: 1 2 3 4 5 p i : 5/15 4/15 3/15 2/15 1/15 log(p i ): ~1.585 ~1.907 ~2.322 ~2.907 ~3.907 p log(p i ): ~0,528 ~0,509 ~0,464 ~0,388 ~0,261 H(p i ) = i=1..n p i log(p i ) = ~2,15 [bit] średnia ważona długości kodu indeksy: 1 2 3 4 5 p i : 5/15 4/15 3/15 2/15 1/15 l i : 2 2 2 3 3 p i l i : 10/15 8/15 6/15 6/15 3/15 SWDK = i=1..n p i l i = 33/15 = ~2,20 [bit] efektywność kodowania E = H(p i ) / SWDK 100% = ~ 2,15/2,20 100% = ~ 97,73%
Algorytm Shannona-Fano Uwagi niedeterministyczny lepszy od algorytmu Shannona
Algorytm Huffmana Opis definicje... procedura...
Algorytm Huffmana Przykład dane wejściowe alfabet: (A B C D E) wagi: (0,5 0,4 0,3 0,2 0,1) uwaga: wagi nie stanowią rozkładu prawdopodobieństwa! (nie wpływa to w żaden sposób na działanie tego algorytmu) dane operacyjne: {(A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)} las początkowy /drzewa zdegenerowane/ (dalej: w zapisie kolumnowym, tzn. (A 0,5) (B 0,4) ) (C 0,3) (D 0,2) (E 0,1)
Algorytm Huffmana Przykład dane operacyjne (A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1)
Algorytm Huffmana Przykład dane operacyjne (A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1) przetwarzanie (D 0,2) (E 0,1)
Algorytm Huffmana Przykład dane operacyjne (A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1) przetwarzanie ({(D 0,2) (E 0,1)} 0,3) (D 0,2) (E 0,1)
Algorytm Huffmana Przykład dane operacyjne (A 0,5) (B 0,4) (C 0,3) (D 0,2) (E 0,1) przetwarzanie ({(D 0,2) (E 0,1)} 0,3) (D 0,2) (E 0,1)
Algorytm Huffmana Przykład dane operacyjne (A 0,5) (B 0,4) (C 0,3) ({(D 0,2) (E 0,1)} 0,3) (D 0,2) (E 0,1)
Algorytm Huffmana Przykład dane operacyjne (A 0,5) (B 0,4) (C 0,3) ({(D 0,2) (E 0,1)} 0,3) (D 0,2) (E 0,1) przetwarzanie (C 0,3) ({(D 0,2) (E 0,1)} 0,3) (D 0,2) (E 0,1)
Algorytm Huffmana Przykład dane operacyjne (A 0,5) (B 0,4) (C 0,3) ({(D 0,2) (E 0,1)} 0,3) (D 0,2) (E 0,1) przetwarzanie ({(C 0,3) (D 0,2) (E 0,1)} 0,6) (C 0,3) ({(D 0,2) (E 0,1)} 0,3)» (D 0,2)» (E 0,1)
Algorytm Huffmana Przykład dane operacyjne (A 0,5) (B 0,4) (C 0,3) ({(D 0,2) (E 0,1)} 0,3) (D 0,2) (E 0,1) przetwarzanie ({(C 0,3) (D 0,2) (E 0,1)} 0,6) (C 0,3) ({(D 0,2) (E 0,1)} 0,3)» (D 0,2)» (E 0,1)
Algorytm Huffmana Przykład dane operacyjne ({(C 0,3) (D 0,2) (E 0,1)} 0,6) (C 0,3) ({(D 0,2) (E 0,1)} 0,3) (A 0,5) (B 0,4)» (D 0,2)» (E 0,1)
Algorytm Huffmana Przykład dane operacyjne ({(C 0,3) (D 0,2) (E 0,1)} 0,6) (C 0,3) ({(D 0,2) (E 0,1)} 0,3) (A 0,5) (B 0,4) przetwarzanie (A 0,5) (B 0,4)» (D 0,2)» (E 0,1)
Algorytm Huffmana Przykład dane operacyjne ({(C 0,3) (D 0,2) (E 0,1)} 0,6) (C 0,3) ({(D 0,2) (E 0,1)} 0,3) (A 0,5) (B 0,4) przetwarzanie» (D 0,2)» (E 0,1) ({(A 0,5) (B 0,4)} 0,9) (A 0,5) (B 0,4)
Algorytm Huffmana Przykład dane operacyjne ({(C 0,3) (D 0,2) (E 0,1)} 0,6) (C 0,3) ({(D 0,2) (E 0,1)} 0,3) (A 0,5) (B 0,4) przetwarzanie» (D 0,2)» (E 0,1) ({(A 0,5) (B 0,4)} 0,9) (A 0,5) (B 0,4)
Algorytm Huffmana Przykład dane operacyjne ({(A 0,5) (B 0,4)} 0,9) (A 0,5) (B 0,4) ({(C 0,3) (D 0,2) (E 0,1)} 0,6) (C 0,3) ({(D 0,2) (E 0,1)} 0,3)» (D 0,2)» (E 0,1)
Algorytm Huffmana Przykład dane operacyjne ({(A 0,5) (B 0,4)} 0,9) (A 0,5) (B 0,4) ({(C 0,3) (D 0,2) (E 0,1)} 0,6) (C 0,3) ({(D 0,2) (E 0,1)} 0,3) przetwarzanie» (D 0,2)» (E 0,1) ({(A 0,5) (B 0,4)} 0,9) (A 0,5) (B 0,4) ({(C 0,3) (D 0,2) (E 0,1)} 0,6) (C 0,3) ({(D 0,2) (E 0,1)} 0,3)» (D 0,2)» (E 0,1)
Algorytm Huffmana Przykład dane operacyjne ({(A 0,5) (B 0,4)} 0,9) (A 0,5) (B 0,4) ({(C 0,3) (D 0,2) (E 0,1)} 0,6) (C 0,3) ({(D 0,2) (E 0,1)} 0,3) przetwarzanie» (D 0,2)» (E 0,1) ({(A 0,5) (B 0,4) (D 0,3) (D 0,2) (E 0,1)} 1,5) ({(A 0,5) (B 0,4)} 0,9)» (A 0,5)» (B 0,4) ({(C 0,3) (D 0,2) (E 0,1)} 0,6)» (C 0,3)» ({(D 0,2) (E 0,1)} 0,3) (D 0,2) (E 0,1)
Algorytm Huffmana Przykład dane operacyjne ({(A 0,5) (B 0,4)} 0,9) (A 0,5) (B 0,4) ({(C 0,3) (D 0,2) (E 0,1)} 0,6) (C 0,3) ({(D 0,2) (E 0,1)} 0,3) przetwarzanie» (D 0,2)» (E 0,1) ({(A 0,5) (B 0,4) (D 0,3) (D 0,2) (E 0,1)} 1,5) ({(A 0,5) (B 0,4)} 0,9)» (A 0,5)» (B 0,4) ({(C 0,3) (D 0,2) (E 0,1)} 0,6)» (C 0,3)» ({(D 0,2) (E 0,1)} 0,3) (D 0,2) (E 0,1)
Algorytm Huffmana Przykład dane operacyjne ({(A 0,5) (B 0,4) (D 0,3) (D 0,2) (E 0,1)} 1,5) ({(A 0,5) (B 0,4)} 0,9)» (A 0,5)» (B 0,4) ({(C 0,3) (D 0,2) (E 0,1)} 0,6)» (C 0,3)» ({(D 0,2) (E 0,1)} 0,3) (D 0,2) (E 0,1)
Algorytm Huffmana Przykład dane operacyjne ({(A 0,5) (B 0,4) (D 0,3) (D 0,2) (E 0,1)} 1,5) ({(A 0,5) (B 0,4)} 0,9) przetwarzanie» (A 0,5)» (B 0,4) ({(C 0,3) (D 0,2) (E 0,1)} 0,6) koniec!» (C 0,3)» ({(D 0,2) (E 0,1)} 0,3) (D 0,2) (E 0,1)
Algorytm Huffmana Przykład wynikowe drzewo ({(A 0,5) (B 0,4) (D 0,3) (D 0,2) (E 0,1)} 1,5) ({(A 0,5) (B 0,4)} 0,9)» (A 0,5)» (B 0,4) ({(C 0,3) (D 0,2) (E 0,1)} 0,6)» (C 0,3)» ({(D 0,2) (E 0,1)} 0,3) (D 0,2) (E 0,1)
Algorytm Huffmana Przykład wynikowe kody? ({(A 0,5) (B 0,4) (D 0,3) (D 0,2) (E 0,1)} 1,5) ({(A 0,5) (B 0,4)} 0,9)» (A 0,5)» (B 0,4) ({(C 0,3) (D 0,2) (E 0,1)} 0,6)» (C 0,3)» ({(D 0,2) (E 0,1)} 0,3) (D 0,2) (E 0,1)
Algorytm Huffmana Przykład wynikowe kody? ({(A 0,5) (B 0,4) (D 0,3) (D 0,2) (E 0,1)} 1,5) 0: ({(A 0,5) (B 0,4)} 0,9)» 0: (A 0,5)» 1: (B 0,4) 1: ({(C 0,3) (D 0,2) (E 0,1)} 0,6)» 0: (C 0,3)» 1: ({(D 0,2) (E 0,1)} 0,3) 0: (D 0,2) 1: (E 0,1)
Algorytm Huffmana Przykład wynikowe kody? ({(A 0,5) (B 0,4) (D 0,3) (D 0,2) (E 0,1)} 1,5) 0: ({(A 0,5) (B 0,4)} 0,9)» 0: (A 0,5) A: 00» 1: (B 0,4) B: 01 1: ({(C 0,3) (D 0,2) (E 0,1)} 0,6)» 0: (C 0,3) C: 10» 1: ({(D 0,2) (E 0,1)} 0,3) 0: (D 0,2) D: 110 1: (E 0,1) E: 111
Algorytm Huffmana Przykład wynikowe kody A: 00 B: 01 C: 10 D: 110 E: 111
Algorytm Huffmana Przykład analiza entropia danych indeksy: 1 2 3 4 5 p i : 5/15 4/15 3/15 2/15 1/15 log(p i ): ~1.585 ~1.907 ~2.322 ~2.907 ~3.907 p log(p i ): ~0,528 ~0,509 ~0,464 ~0,388 ~0,261 H(p i ) = i=1..n p i log(p i ) = ~2,15 [bit] średnia ważona długości kodu indeksy: 1 2 3 4 5 p i : 5/15 4/15 3/15 2/15 1/15 l i : 2 2 2 3 3 p i l i : 10/15 8/15 6/15 6/15 3/15 SWDK = i=1..n p i l i = 33/15 = ~2,20 [bit] efektywność kodowania E = H(p i ) / SWDK 100% = ~ 2,15/2,20 100% = ~ 97,73%
Algorytm Huffmana Uwagi niedeterministyczny lepszy od algorytmu Shannona-Fano
Algorytmy Algorytm Shannona-Fano a algorytm Huffmana podobieństwa: konstruowanie drzewa w oparciu o wagi różnice: Shanon-Fano: top-down Huffman: bottom-up
... 150