Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Kodowanie informacji Instytut Informatyki UWr Studia wieczorowe

Podobne prezentacje


Prezentacja na temat: "Kodowanie informacji Instytut Informatyki UWr Studia wieczorowe"— Zapis prezentacji:

1 Kodowanie informacji Instytut Informatyki UWr Studia wieczorowe
Wykład nr 2: rozszerzone i dynamiczne Huffmana

2 Kod Huffmana - niemiłe przypadki...
Niech alfabet składa się z 2 liter: 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 Natomiast algorytm Huffmana daje kod K: K(a)=0 K(b)=1 Czyli S(K) = 1/16*1+15/16*1 = 1 ... żadnej kompresji, prawie 3 razy gorzej od entropii...

3 Kod Huffmana - rozszerzamy...
Dla rozkładu prawdopodobieńtw jak poprzednio: P(A)=1/16 P(B)=15/16 Wprowadźmy rozszerzony alfabet {AA, AB, BB, BA} średnia długość powyższego kodu Huffmana: S(H) = 1/256 * /256 * 3 +15/256 * /256*1 1.18 a entropia: H(1/256, 15/256, 15/256, 225/256)  0.68 Czyli już „tylko” niecałe 2 razy gorzej od entropii. Para P(para) Kod Huffm AA 1 / 256 100 AB 15 / 256 101 BB 225 / 256 BA 11

4 Uogólnijmy rozszerzanie...
Uogólniamy (dla ciągów niezależnych): Dany rozkład prawdopodobieństw P = { p1,,pn } odpowiadający symbolom a1,,an k-tym rozszerzeniem Pk rozkładu P nazywamy rozkład odpowiadający wszystkim k-elementowym ciągom symboli ze zbioru { a1,,an } prawdopodobieństwo ciągu ai1 aik w rozkładzie Pk to pi1*pi2* *pik Jak zmieni się entropia? rozkład prawdopodobieństwa oryginalnych symboli nie zmienił się! A zatem „zawartość informacyjna” danych również powinna ulec zmianie!!!

5 Entropia dla rozszerzonego alfabetu
Twierdzenie Niech Pk będzie rozkładem prawdopodobieństw k-tego rozszerzenia alfabetu z rozkładem P. Wówczas: H(Pk) = k  H(P) Dowód: k = 1: oczywiste Krok indukcyjny: Załóżmy, że H(Pk-1) = (k-1)  H(P). Wówczas:

6 Dowód c.d.

7 Rozszerzony alfabet c.d.
Skoro H(Pk) = k  H(P) to znaczy, że zgodnie z intuicją liczba „bitów informacji” przypadających na jeden symbol rozszerzonego alfabetu jest k-krotnie większa od liczby bitów „informacji” na symbol oryginalnego alfabetu ale jeden symbol w Pk odpowiada k symbolom w P czyli liczba bitów na „oryginalny” symbol nie zmienia się. A jak z jakością kodów Huffmana dla rozszerzonego alfabetu?

8 Jakość Huffmana dla rozszerzonego...
Wniosek Średnia długość kodu Huffmana dla rozszerzonego alfabetu z rozkładem Pk odpowiadająca przypadająca na jeden symbol alfabetu oryginalnego wynosi co najwyżej H(P)+1/k. Dowód: Optymalność kodu Huffmana gwarantuje, że S( Huffmank )  H(Pk) + 1 gdzie Huffmank to kod Huffmana dla Pk. A zatem na jeden symbol alfabetu oryginalnego przypada co najwyżej: S( Huffmank ) / k  (H(Pk) + 1) / k = H(P) + 1/k bitów.

9 Kompresja a wydajność Wniosek
Używając rozszerzonych kodów Huffmana dla coraz większych k osiągamy kompresję coraz bliższą entropii. Ale związane są z tym koszty: W k-tym rozszerzeniu alfabetu o rozmiarze n uzyskujemy alfabet rozmiaru nk (wzrost wykładniczy!) Oznacza to wykładniczy wzrost czasu tworzenia kodu ...oraz wykładniczy wzrost pamięci potrzebnej na przechowywanie (drzewa) kodu Ale czas kompresji/dekompresji pozostaje liniowy! W praktyce: Trzeba wybrać kompromis między kompresją a czasem/pamięcią Problem techniczny: tekst musi mieć długość podzielną przez k.

10 Skąd brać prawdopodobieństwa?
Prawdopodobieństwa ustalone z góry, w oparciu o specyfikę danych: z góry znane koderowi i dekoderowi (np. standard wideo H.263) ale przestaje działać gdy zmieni się charakterystyka danych Wyznaczamy prawdopodobieństwa w oparciu o częstość występowania symboli w kodowanym tekście: konieczne 2 przebiegi: najpierw zliczanie częstości, potem kodowanie konieczne dołączenie kodu lub częstości do zakodowanych danych (dekoder ich nie zna!) Kodowanie dynamiczne: w każdym kroku korzystamy z częstości w dotychczas zakodowanej części tekstu (znać ją będzie też dekoder) wystarczy jeden przebieg nie trzeba dołączać kodu ani prawdopodobieństw (pbb) do danych.

11 Dynamiczne kody Huffmana
... czyli wystarczy tylko raz policzyć do nieskończoności Idea: Przy kodowaniu każdej litery stosujemy kod Huffmana dla pbb opartych na częstościach już zakodowanej części Prawdopodobieństwa te znane są również dekoderowi: Przy odkodowywaniu p-tej litery znane są już litery od pierwszej do (p-1)-szej Po każdej literze konieczne modyfikowanie (drzewa) kodu ALE wystarczy jeden przebieg kodowanego pliku! CEL: Przebudowa kodu po każdym kroku nie powinna być kosztowna!

12 Dynamiczne kody Huffmana
Ważne przy kodowaniu modyfikujemy kod po zakodowaniu symbolu przy dekodowaniu modyfikujemy kod przed odkodowaniem symbolu W ten sposób koder i dekoder przy każdym symbolu używają tego samego drzewa kodu!

13 Dynamiczne kody Huffmana
Numerowanie wierzchołków drzewa: od dołu do góry od lewej do prawej 7 6 A 5 3 B 4 C D 1 2

14 Dynamiczne kody Huffmana c.d.
Wagi wierzchołków: waga liścia = liczba wystąpień odpowiadającego mu symbolu waga wierzchołka wewnętrznego = suma wag liści w jego poddrzewie 11 6 5 3 3 1 2

15 Niezmiennik Drzewo kodu spełniające poniższe warunki jest optymalne:
Istnieje numerowanie wszystkich wierzchołków v1,,v2n-1 takie, że: w(v1)  w(v2)    w(v2n-1), gdzie w(x) to waga wierzchołka x Numerowanie v1,,v2n-1 nadaje numery: od dołu do góry w ramach poziomu: od lewej do prawej.

16 Inicjalizacja Na początku (alfabet a1,…,am):
drzewo kodu: złożone z jednego wierzchołka NP (od „nie przesłany”) o wadze 0 i numerze 2m-1; UWAGI: wierzchołek NP będzie w drzewie symbolizować wszystkie symbole, które jeszcze nie pojawiły się w tekście numer 2m-1 dlatego, że będzie 2m-1 wierzchołków docelowo (m liści) Wszystkich literom przyporządkowujemy kody stałe, wykorzystywane tylko przy pierwszym pojawieniu się danej litery w tekście:

17 Kody stałe Niech e i r takie, że m = 2e + r i 0 r < 2e.
Literze ai przyporządkowujemy kod stały: (e+1) -bitowej reprezentacji liczby i-1 gdy 1  i  2r e-bitowej reprezentacji liczby i-r-1 w przeciwnym przypadku. Czyli Kod stały równy kodowi o stałej długości równej log m, gdy m jest potęgą dwójki Mała optymalizacja kodu o stałej długości, gdy m nie jest potęgą dwójki: 2r symboli ma kod o długości log m m - 2r symbol ma kod o długości log m

18 Kody stałe - przykład FAKT: kod stały jest kodem prefiksowym (ćw.)
Niech m = 10 (alfabet ma 10 symboli). Wtedy : 10 = 23+2, czyli e=3 r=2 Inaczej: rysujemy drzewo o głębokości e+1 i staramy się wykorzystać „wolne” liście (dwa liście na poziomie e+1 dpowiadają jednemu wierzchołkowi na poziomie e) FAKT: kod stały jest kodem prefiksowym (ćw.) Litera Kod A1 0000 A2 0001 A3 0010 A4 0011 A5 010 A6 011 A7 100 A8 101 A9 110 A10 111

19 Kodowanie Dla kolejnego symbolu tekstu b:
jeśli w drzewie kodu nie ma liścia o etykiecie b, kodujemy b jako: kod wierzchołka NP a za nim kod stały odpowiadający symbolowi b Dodaj 2 dzieci wierzchołka NP (o numerze p) lewe dziecko to nowy NP (numerze p-2, waga 0) prawe dziecko ma etykietę b (numer p-1, waga 1) Jeśli w drzewie kodu jest liść o etykiecie b: kodujemy b za pomocą odpowiadającego mu w drzewie kodu słowa kodowego wykonaj aktualizację drzewa kodu

20 Dekodowanie Dopóki nie ma końca zakodowanego pliku:
odkoduj słowo kodowe odpowiadające liściowi aktualnego drzewa kodu jeśli odkodowane słowo kodowe odpowiada literze alfabetu: zapisz ją. jeśli odkodowane słowo kodowe odpowiada wierzchołkowi NP: odkoduj kolejną literę według kodu stałego (e lub e+1 bitów według drzewa kodu stałego): zapisz ją. Następnie, dodaj 2 dzieci wierzchołka NP (o numerze p) lewe dziecko to nowy NP (numerze p-2, waga 0) prawe dziecko ma etykietę b (numer p-1, waga 1) wykonaj aktualizację drzewa kodu.

21 Aktualizacja drzewa kodu
CEL - zachowanie niezmiennika: numerowanie wszystkich wierzchołków v1,,v2n-1 (od dołu do góry, od lewej do prawej) ma spełniać warunek: w(v1)  w(v2)    w(v2n-1), gdzie w(x) to waga wierzchołka x Idea rozwiązania: przechodzimy ścieżkę od liścia odpowiadającego ostatniemu symbolowi i zwiększamy wagi wszystkich wierzchołków o 1 gdy zwiększenie wagi zaburza powyższy niezmiennik, zamieniamy aktualny wierzchołek z najwyżej położonym wierzchołkiem o takiej samej wadze. Efekt: koszt proporcjonalny do długości słowa kodowego a nie n log n ....

22 Aktualizacja drzewa kodu c.d.
Blok: zbiór wierzchołków o tej samej wadze. UWAGI: Jeśli numeracja v1,,v2n-1 spełnia warunek w(v1)  w(v2)    w(v2n-1), to wszystkie wierzchołki z jednego bloku tworzą spójny obszar w tej numeracji Jak reprezentujemy bloki: lista dwustronna w kolejności odpowiadającej numeracji wszystkich wierzchołków dodatkowo wskaźniki na początki bloków

23 Aktualizacja drzewa kodu c.d.
Niech v to wierzchołek odpowiadający ostatnio zakodowanemu bądź odkodowanemu symbolowi: Dopóki v jest różny od korzenia: jeśli numer v nie jest największy w bloku do którego v należy: zamień v z wierzchołkiem w o największym numerze w bloku (o ile w nie jest rodzicem v). UWAGI: zamieniamy całe poddrzewa v i w zamieniają się numerami ale numery pozostałych wierzchołków nie zmieniają się zwiększ wagę v o jeden: w(v)  w(v)+1 v  rodzic(v)

24 Przykład: dyn. Huffman Alfabet {A, B, C, D, ..., J} – 10 elementów.
Tekst do zakodowania: A A B C D A D Kody stałe: Drzewo kodu: Litera Kod A 0000 B 0001 C 0010 D 0011 E 010 F 011 G 100 H 101 I 110 J 111 NP

25 Przykład c.d. A A B C D A D Drzewo kodu: OUTPUT: 0000 kod stały A
UWAGA: kod wierzchołka NP jest pusty! 21 NP

26 Przykład c.d.: A A B C D A D Drzewo kodu: OUTPUT: 0000 kod stały A
UWAGA: kod wierzchołka NP jest pusty! 21 1 19 1 20 NP A

27 Przykład c.d.: A A B C D A D Drzewo kodu: OUTPUT: 00001 1 1 NP A 21 20
1 20 19 NP A

28 Przykład c.d.: A A B C D A D Drzewo kodu: OUTPUT: 00001 2 2 NP A 21 19
2 20 NP A

29 Przykład c.d.: A A B C D A D Drzewo kodu: OUTPUT: 0000 1 0 0001
kod NP kod stały B 2 21 19 2 20 NP A

30 Przykład c.d.: A A B C D A D Drzewo kodu: OUTPUT: 0000 1 0 0001 2 2 A
21 19 2 20 A 17 18 NP B

31 Przykład c.d.: A A B C D A D Drzewo kodu: OUTPUT: 0000 1 0 0001 3 1 2
21 19 1 2 20 A 17 1 18 NP B

32 Przykład c.d.: A A B C D A D Drzewo kodu:
OUTPUT: kod NP kod stały C 3 21 19 1 2 20 A 17 1 18 NP B

33 Przykład c.d.: A A B C D A D Drzewo kodu:
OUTPUT: 3 21 19 1 2 20 A 17 1 18 B 15 16 NP c

34 Przykład c.d.: A A B C D A D Drzewo kodu: Popraw. śc.
OUTPUT: 4 21 19 2 2 20 A 17 1 1 18 B 15 1 16 NP c

35 Przykład c.d.: A A B C D A D Drzewo kodu: Popraw. śc.
OUTPUT: kod NP kod stały D 4 21 19 2 2 20 A 17 1 1 18 B 15 1 16 NP c

36 Przykład c.d.: A A B C D A D Drzewo kodu:
OUTPUT: 4 21 19 2 2 20 A 17 1 1 18 B 15 1 16 c 13 14 NP D

37 Przykład c.d.: A A B C D A D Drzewo kodu: ZAMIANA!
OUTPUT: 4 21 19 2 2 20 A 17 1 1 18 B ZAMIANA! 1 15 1 16 c 1 13 14 NP D

38 Przykład c.d.: A A B C D A D Drzewo kodu: ZAMIANA!
OUTPUT: 4 21 19 2 2 20 A 1 17 2 18 B ZAMIANA! 1 15 1 16 c 1 13 14 NP D

39 Przykład c.d.: A A B C D A D Drzewo kodu:
OUTPUT: 4 21 2 20 3 19 A 17 1 2 18 B 1 15 1 16 c 13 1 14 NP D

40 Przykład c.d.: A A B C D A D Drzewo kodu:
OUTPUT: 5 21 2 20 3 19 A 17 1 2 18 B 1 15 1 16 c 13 1 14 NP D

41 Przykład c.d.: A A B C D A D Drzewo kodu:
OUTPUT: Uwaga: A był kodowany jako 0000, 1 a na końcu jako 0. 5 21 2 20 3 19 A 17 1 2 18 B 1 15 1 16 c 13 1 14 NP D

42 Przykład c.d.: A A B C D A D Drzewo kodu:
OUTPUT: 6 21 3 20 3 19 A 17 1 2 18 B 1 15 1 16 c 13 1 14 NP D

43 Przykład c.d.: A A B C D A D Drzewo kodu:
OUTPUT: 6 21 3 20 3 19 A 17 1 2 18 B 1 15 1 16 c 13 1 14 NP D

44 Przykład c.d.: A A B C D A D Drzewo kodu: ZAMIANA!
OUTPUT: 6 21 ZAMIANA! 3 20 3 19 A 17 1 2 18 B 1 15 1 16 c 13 1 14 NP D

45 Przykład c.d.: A A B C D A D Drzewo kodu:
OUTPUT: 7 21 3 20 4 19 A 17 2 2 18 D 1 15 1 16 c 13 1 14 NP B

46 Dynamiczny Huffman: struktury danych
Tabela kodu stałego Binarne drzewo kodu H. Wskaźniki na liście dla każdej litery Lista dwustronna wg numeracji (oraz wskaźniki na początki bloków) CZAS: liniowy względem rozmiaru kodu 7 21 3 20 4 19 A 17 2 2 18 D 1 15 1 16 c A B C D 13 1 14 NP B

47 Dynamiczny Huffman: niezmiennik?
Chcemy pokazać, że algorytm modyfikacji drzewa kodu zachowuje własności: Numeracja w algorytmie v1,,v2n-1 jest numeracją od dołu do góry i od lewej do prawej Wagi wierzchołków spełniają warunek: w(v1)  w(v2)    w(v2n-1) Szkic dowodu: Zamiana z największym w bloku gwarantuje, że zanim zwiększymy wagę wierzchołka, „wypchniemy” go przed wszystkie wierzchołki, których waga stanie się mniejsza (czyli „na początek” jego bloku) Ale razem z wierzchołkiem „przestawiamy” całe jego poddrzewo... co może zaburzyć numerację Jednak: wszystkie wierzchołki pomiędzy dwoma zamienianymi są liśćmi (poza jednym przypadkiem...)

48 Kodowanie Huffmana: podsumowanie
Własności Optymalny wśród prefiksowych Kodowanie i dekodowanie w czasie liniowym! Kody rozszerzone: kompromis między zasobami a kompresją Możliwość implementacji jednoprzebiegowej, dynamicznej: kompresja zbliżona do kodu statycznego, dodatkowy czas liniowy Zastosowania: pkZIP, lha, gz, zoo, arj. formaty JPEG i MPEG (jako jeden z etapów, czasem zmodyfikowany) Eksperymenty Bezstratna kompresja obrazów: współczynnik 1,5 Kompresja tekstów w języku naturalnym: wsp. 2 Kompresja dźwięku: wsp. 1,5 (kodowanie różnic)


Pobierz ppt "Kodowanie informacji Instytut Informatyki UWr Studia wieczorowe"

Podobne prezentacje


Reklamy Google