Kodowane nformacj Instytut Informatyk UWr Studa weczorowe Wykład nr 2: rozszerzone dynamczne Huffmana
Kod Huffmana - nemłe przypadk... Nech alfabet składa sę z 2 lter: P(a)=1/16 P(b)=15/16 Mamy H(1/16, 15/16) = -1/16*log(1/16)-15/16*log(15/16) 0.34 Natomast algorytm Huffmana daje kod K: K(a)=0 K(b)=1 Czyl S(K) = 1/16*1+15/16*1 = 1... żadnej kompresj, prawe 3 razy gorzej od entrop...
Kod Huffmana - rozszerzamy... Dla rozkładu prawdopodobeńtw jak poprzedno: P(A)=1/16 P(B)=15/16 Wprowadźmy rozszerzony alfabet {AA, AB, BB, BA} Para P(para) Kod Huffm AA 1 / 256 100 AB 15 / 256 101 BB 225 / 256 0 BA 15 / 256 11 średna długość powyższego kodu Huffmana: S(H) = 1/256 * 3 + 15/256 * 3 +15/256 * 2 + 225/256*1 1.18 a entropa: H(1/256, 15/256, 15/256, 225/256) 0.68 Czyl już tylko necałe 2 razy gorzej od entrop.
Uogólnjmy rozszerzane... Uogólnamy (dla cągów nezależnych): Dany rozkład prawdopodobeństw P = { p 1,,p n } odpowadający symbolom a 1,,a n k-tym rozszerzenem P k rozkładu P nazywamy rozkład odpowadający wszystkm k-elementowym cągom symbol ze zboru { a 1,,a n } prawdopodobeństwo cągu a 1 a k w rozkładze P k to p 1 *p 2 * *p k Jak zmen sę entropa? rozkład prawdopodobeństwa orygnalnych symbol ne zmenł sę! A zatem zawartość nformacyjna danych równeż ne pownna ulec zmane!!!
Entropa dla rozszerzonego alfabetu Twerdzene Nech P k będze rozkładem prawdopodobeństw k-tego rozszerzena alfabetu z rozkładem P. Wówczas: Dowód: k = 1: oczywste H(P k ) = k H(P) Krok ndukcyjny: Załóżmy, że H(P k-1 ) = (k-1) H(P). Wówczas:
Dowód c.d. ( ) ) ( ) ( 1) ( log log ) ( ] log ) log( )] log( ) [log( ) log( ) ( 1 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 1 1 1 1,,,,,,,, P H k p P H k p p p P H p p p p p p p p p p p p p p p p p p p P H k k k k k k k k k k k k k = + = + = + = + = =
Rozszerzony alfabet c.d. Skoro H(P k ) = k H(P) to znaczy, że zgodne z ntucją lczba btów nformacj przypadających na jeden symbol rozszerzonego alfabetu jest k-krotne wększa od lczby btów nformacj na symbol orygnalnego alfabetu ale jeden symbol w P k odpowada k symbolom w P czyl lczba btów na orygnalny symbol ne zmena sę. A jak z jakoścą kodów Huffmana dla rozszerzonego alfabetu?
Jakość Huffmana dla rozszerzonego... Wnosek Średna długość kodu Huffmana dla rozszerzonego alfabetu z rozkładem P k odpowadająca przypadająca na jeden symbol alfabetu orygnalnego wynos co najwyżej H(P)+1/k. Dowód: Optymalność kodu Huffmana gwarantuje, że S( Huffman k ) H(P k ) + 1 gdze Huffman k to kod Huffmana dla prawdopodobeństw P k. A zatem na jeden symbol alfabetu orygnalnego przypada co najwyżej: btów. S( Huffman k ) / k (H(P k ) + 1) / k = H(P) + 1/k
Kompresja a wydajność Wnosek Używając rozszerzonych kodów Huffmana dla coraz wększych k osągamy kompresję coraz blższą entrop. Ale zwązane są z tym koszty: W k-tym rozszerzenu alfabetu o rozmarze n uzyskujemy alfabet rozmaru n k (wzrost wykładnczy!) Oznacza to wykładnczy wzrost czasu tworzena kodu...oraz wykładnczy wzrost pamęc potrzebnej na przechowywane (drzewa) kodu Ale czas kompresj/dekompresj pozostaje lnowy! W praktyce: Trzeba wybrać komproms mędzy kompresją a czasem/pamęcą Problem technczny: tekst mus meć długość podzelną przez k.
Skąd brać prawdopodobeństwa? Prawdopodobeństwa ustalone z góry, w oparcu o specyfkę danych: z góry znane koderow dekoderow (np. standard wdeo H.263) ale przestaje dzałać gdy zmen sę charakterystyka danych Wyznaczamy prawdopodobeństwa w oparcu o częstość występowana symbol w kodowanym tekśce: koneczne 2 przebeg: najperw zlczane częstośc, potem kodowane koneczne dołączene kodu lub częstośc do zakodowanych danych (dekoder ch ne zna!) Kodowane dynamczne: w każdym kroku korzystamy z częstośc w dotychczas zakodowanej częśc tekstu (znać ją będze też dekoder) wystarczy jeden przebeg ne trzeba dołączać kodu an prawdopodobeństw (pbb) do danych.
Dynamczne kody Huffmana... czyl wystarczy tylko raz polczyć do neskończonośc Idea: CEL: Przy kodowanu każdej ltery stosujemy kod Huffmana dla prawdopodobeństw opartych na częstoścach już zakodowanej częśc Prawdopodobeństwa te znane są równeż dekoderow: Przy odkodowywanu p-tej ltery znane są już ltery od perwszej do (p-1)-szej Po każdej lterze koneczne modyfkowane (drzewa) kodu ALE wystarczy jeden przebeg kodowanego plku! Przebudowa kodu po każdym kroku ne pownna być kosztowna!
Dynamczne kody Huffmana Ważne przy kodowanu modyfkujemy kod po zakodowanu symbolu przy dekodowanu modyfkujemy kod przed odkodowanem symbolu W ten sposób koder dekoder przy każdym symbolu używają tego samego drzewa kodu!
Dynamczne kody Huffmana Numerowane werzchołków drzewa: od dołu do góry od lewej do prawej 7 A 5 3 C D 1 2 6 B 4
Dynamczne kody Huffmana c.d. Wag werzchołków: waga lśca = lczba wystąpeń odpowadającego mu symbolu waga werzchołka wewnętrznego = suma wag lśc w jego poddrzewe 11 5 6 3 3 1 2
Nezmennk Drzewo kodu o n elementach spełnające ponższe warunk jest optymalne: Istneje numerowane wszystkch werzchołków v 1,,v 2n-1 take, że: w(v 1 ) w(v 2 ) w(v 2n-1 ), gdze w(x) to waga werzchołka x Numerowane v 1,,v 2n-1 jest: od dołu do góry w ramach pozomu: od lewej do prawej.
Incjalzacja Na początku (alfabet a 1,,a m ): drzewo kodu: złożone z jednego werzchołka NP (od ne przesłany ) o wadze 0 numerze 2m-1; UWAGI: werzchołek NP będze w drzewe symbolzować wszystke symbole, które jeszcze ne pojawły sę w tekśce numer 2m-1 dlatego, że będze 2m-1 werzchołków docelowo (m lśc) Wszystkch lterom przyporządkowujemy kody stałe, wykorzystywane tylko przy perwszym pojawenu sę danej ltery w tekśce:
Kody stałe Nech e r take, że m = 2 e + r 0 r < 2 e. Lterze a przyporządkowujemy kod stały: (e+1) -btowej reprezentacj lczby -1 gdy 1 2r e-btowej reprezentacj lczby -r-1 w przecwnym przypadku. Czyl Kod stały równy kodow o stałej długośc równej log m, gdy m jest potęgą dwójk Mała optymalzacja kodu o stałej długośc, gdy m ne jest potęgą dwójk: 2r symbol ma kod o długośc log m m - 2r symbol ma kod o długośc log m
Kody stałe - przykład Nech m = 10 (alfabet ma 10 symbol). Wtedy : 10 = 2 3 +2, czyl e = 3 r = 2 Inaczej: rysujemy drzewo o głębokośc e+1 staramy sę wykorzystać wolne lśce (dwa lśce na pozome e+1 odpowadają jednemu werzchołkow na pozome e) Ltera A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 Kod 0000 0001 0010 0011 010 011 100 101 110 111 FAKT: kod stały jest kodem prefksowym (ćw.)
Kodowane Dla kolejnego symbolu tekstu b: jeśl w drzewe kodu ne ma lśca o etykece b, kodujemy b jako: kod werzchołka NP a za nm kod stały odpowadający symbolow b Dodaj 2 dzec werzchołka NP (nech numer NP to p) lewe dzecko to nowy NP (numerze p-2, waga 0) prawe dzecko ma etyketę b (numer p-1, waga 1) Jeśl w drzewe kodu jest lść o etykece b: kodujemy b za pomocą odpowadającego mu w drzewe kodu słowa kodowego wykonaj aktualzację drzewa kodu!
Dekodowane Dopók ne ma końca zakodowanego plku: odkoduj słowo kodowe odpowadające lścow aktualnego drzewa kodu jeśl odkodowane słowo kodowe odpowada lterze alfabetu: zapsz ją. jeśl odkodowane słowo kodowe odpowada werzchołkow NP: odkoduj kolejną lterę według kodu stałego (e lub e+1 btów według drzewa kodu stałego): zapsz ją. Następne, dodaj 2 dzec werzchołka NP (o numerze p) lewe dzecko to nowy NP (numerze p-2, waga 0) prawe dzecko ma etyketę b (numer p-1, waga 1) wykonaj aktualzację drzewa kodu.
Aktualzacja drzewa kodu CEL - zachowane nezmennka: numerowane wszystkch werzchołków v 1,,v 2n-1 (od dołu do góry, od lewej do prawej) ma spełnać warunek: w(v 1 ) w(v 2 ) w(v 2n-1 ), gdze w(x) to waga werzchołka x Idea rozwązana: przechodzmy śceżkę od lśca odpowadającego ostatnemu symbolow zwększamy wag wszystkch werzchołków o 1 gdy zwększene wag zaburza powyższy nezmennk, zamenamy aktualny werzchołek z najwyżej położonym werzchołkem o takej samej wadze. Efekt: koszt proporcjonalny do długośc słowa kodowego a ne n log n...
Aktualzacja drzewa kodu c.d. Blok: zbór werzchołków o tej samej wadze. UWAGI: Jeśl numeracja v 1,,v 2n-1 spełna warunek w(v 1 ) w(v 2 ) w(v 2n-1 ), to wszystke werzchołk z jednego bloku tworzą spójny obszar w tej numeracj Jak reprezentujemy blok: lsta dwustronna w kolejnośc odpowadającej numeracj wszystkch werzchołków; dodatkowo wskaźnk na początk bloków.
Aktualzacja drzewa kodu c.d. Nech v to werzchołek odpowadający ostatno zakodowanemu bądź odkodowanemu symbolow: Dopók v jest różny od korzena: jeśl numer v ne jest najwększy w bloku do którego v należy: zameń v z werzchołkem w o najwększym numerze w bloku (o le w ne jest rodzcem v). UWAGI: zamenamy całe poddrzewa v w zamenają sę numeram ale numery pozostałych werzchołków ne zmenają sę zwększ wagę v o jeden: w(v) w(v)+1 v rodzc(v)
Przykład: dyn. Huffman Alfabet {A, B, C, D,..., J} 10 elementów. Tekst do zakodowana: A A B C D A D Ltera Kod Kody stałe: A 0000 Drzewo kodu: B 0001 C D E 0010 0011 010 0 NP F 011 G 100 H 101 I 110 J 111
Przykład c.d. Drzewo kodu: 21 A A B C D A D 0 NP OUTPUT: 0000 kod stały A UWAGA: kod werzchołka NP jest pusty!
Przykład c.d.: A A B C D A D Drzewo kodu: 21 1 0 1 19 20 NP A OUTPUT: 0000 kod stały A UWAGA: kod werzchołka NP jest pusty!
Przykład c.d.: A A B C D A D Drzewo kodu: 1 21 19 NP 0 1 A 20 OUTPUT: 00001
Przykład c.d.: A A B C D A D Drzewo kodu: 2 21 19 0 2 NP A 20 OUTPUT: 00001
Przykład c.d.: A A B C D A D Drzewo kodu: 2 21 19 0 2 NP A 20 OUTPUT: 0000 1 0 0001 kod NP kod stały B
Przykład c.d.: A A B C D A D Drzewo kodu: 2 21 17 19 0 2 0 0 NP B 18 A 20 OUTPUT: 0000 1 0 0001
Przykład c.d.: A A B C D A D Drzewo kodu: 3 21 17 19 1 2 0 1 NP B 18 A 20 OUTPUT: 0000 1 0 0001
Przykład c.d.: A A B C D A D Drzewo kodu: 3 21 17 19 1 2 0 1 NP B 18 A 20 OUTPUT: 0000 1 0 0001 00 0010 kod NP kod stały C
Przykład c.d.: A A B C D A D Drzewo kodu: 3 21 19 1 2 17 0 1 B 0 0 NP c 15 16 18 A 20 OUTPUT: 0000 1 0 0001 00 0010
Przykład c.d.: A A B C D A D Drzewo kodu: Popraw. śc. 19 4 2 2 17 1 1 B 0 1 NP c 15 16 21 18 A 20 OUTPUT: 0000 1 0 0001 00 0010
Przykład c.d.: A A B C D A D Drzewo kodu: Popraw. śc. 19 4 2 2 17 1 1 B 0 1 NP c 15 16 21 18 A 20 OUTPUT: 0000 1 0 0001 00 0010 000 0011 kod NP kod stały D
Przykład c.d.: A A B C D A D Drzewo kodu: 4 21 NP D 19 2 2 17 1 1 B 0 1 15 16 0 0 13 14 c 18 A 20 OUTPUT: 0000 1 0 0001 00 0010 000 0011
Przykład c.d.: A A B C D A D Drzewo kodu: 4 21 NP D 19 2 2 17 1 1 B 1 1 15 16 0 1 13 14 c 18 A 20 ZAMIANA! OUTPUT: 0000 1 0 0001 00 0010 000 0011
Przykład c.d.: A A B C D A D Drzewo kodu: 4 21 18 2 2 A 1 17 2 B 15 1 1 16 c NP 19 0 1 13 14 D 20 ZAMIANA! OUTPUT: 0000 1 0 0001 00 0010 000 0011
Przykład c.d.: A A B C D A D Drzewo kodu: 4 21 19 A 2 3 1 2 B 15 1 1 16 c NP 20 17 18 0 1 13 14 D OUTPUT: 0000 1 0 0001 00 0010 000 0011
Przykład c.d.: A A B C D A D Drzewo kodu: 5 21 19 A 2 3 1 2 B 15 1 1 16 c NP 20 17 18 0 1 13 14 D OUTPUT: 0000 1 0 0001 00 0010 000 0011
Przykład c.d.: A A B C D A D Drzewo kodu: 5 21 19 A 2 3 1 2 B 15 1 1 16 c NP 20 17 18 0 1 13 14 D OUTPUT: 0000 1 0 0001 00 0010 000 0011 0 Uwaga: A był kodowany jako 0000, 1 a na końcu jako 0.
Przykład c.d.: A A B C D A D Drzewo kodu: 6 21 19 A 3 3 1 2 B 15 1 1 16 c NP 20 17 18 0 1 13 14 D OUTPUT: 0000 1 0 0001 00 0010 000 0011 0
Przykład c.d.: A A B C D A D Drzewo kodu: 6 21 19 A 3 3 1 2 B 15 1 1 16 c NP 20 17 18 0 1 13 14 D OUTPUT: 0000 1 0 0001 00 0010 000 0011 0 1101
Przykład c.d.: A A B C D A D Drzewo kodu: 6 21 19 3 20 3 ZAMIANA! A 1 2 17 18 B 15 1 1 16 c 0 1 13 14 NP D OUTPUT: 0000 1 0 0001 00 0010 000 0011 0 1101
Przykład c.d.: A A B C D A D Drzewo kodu: 7 21 19 A 3 4 2 2 D 15 1 1 16 c NP 20 17 18 0 1 13 14 B OUTPUT: 0000 1 0 0001 00 0010 000 0011 0 1101
Dynamczny Huffman: struktury danych Tabela kodu stałego Bnarne drzewo kodu H. Wskaźnk na lśce dla każdej ltery 19 A Lsta dwustronna wg numeracj (oraz wskaźnk na początk bloków) CZAS: lnowy względem rozmaru kodu A B C D 3 7 4 2 2 D 15 1 1 16 c NP 20 21 17 18 0 1 13 14 B
Dynamczny Huffman: nezmennk? Chcemy pokazać, że algorytm modyfkacj drzewa kodu zachowuje własnośc: Numeracja w algorytme v 1,,v 2n-1 jest numeracją od dołu do góry od lewej do prawej Wag werzchołków spełnają warunek: w(v 1 ) w(v 2 ) w(v 2n-1 ) Szkc dowodu: Zamana z najwększym w bloku gwarantuje, że zanm zwększymy wagę werzchołka, wypchnemy go przed wszystke werzchołk, których waga stane sę mnejsza (czyl na początek jego bloku) Ale razem z werzchołkem przestawamy całe jego poddrzewo... co może zaburzyć numerację Jednak: wszystke werzchołk pomędzy dwoma zamenanym są lśćm (poza jednym przypadkem...)
Kodowane Huffmana: podsumowane Własnośc Optymalny wśród prefksowych Kodowane dekodowane w czase lnowym! Kody rozszerzone: komproms mędzy zasobam a kompresją Możlwość mplementacj jednoprzebegowej, dynamcznej: kompresja zblżona do kodu statycznego, dodatkowy czas lnowy Zastosowana: pkzip, lha, gz, zoo, arj. formaty JPEG MPEG (jako jeden z etapów, czasem zmodyfkowany) Eksperymenty Bezstratna kompresja obrazów: współczynnk 1,5 Kompresja tekstów w języku naturalnym: wsp. 2 Kompresja dźwęku: wsp. 1,5 (kodowane różnc)