Nierównosc Krafta-McMillana, Kodowanie Huffmana

Transkrypt

Nierównosc Krafta-McMillana, Kodowanie Huffmana
Nierówność Krafta-McMillana,
Kodowanie Huffmana
Kodowanie i kompresja informacji - Wykład 2
Filip Zagórski
1 marca 2010
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Test na jednoznaczna˛ dekodowalność
Kod a jest prefiksem kodu b jeśli b jest postaci ax.
x nazywamy sufiksem b wzgledem
˛
a.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Test na jednoznaczna˛ dekodowalność
Kod a jest prefiksem kodu b jeśli b jest postaci ax.
x nazywamy sufiksem b wzgledem
˛
a.
Algorytm
Tworzymy liste˛ słów kodowych.
Dla każdej pary sprawdzamy czy jedno słowo jest
prefiksem drugiego, jeśli tak to do listy dodajemy sufiks
drugiego słowa (chyba, że już dodaliśmy taki sufiks).
Powtarzamy powyższa˛ procedure˛ aż do momentu kiedy
znajdziemy na liście sufiks równy słowu kodowemu (kod
nie jest jednoznaczny) albo nie można znaleźć nowych
sufiksów (kod jest jednoznaczny).
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Weźmy kod {0, 01, 11}.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Weźmy kod {0, 01, 11}.
Kod 0 jest prefiksem 01. Innych par nie ma wiec
˛
nowa lista ma postać {0, 01, 11, 1}.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Weźmy kod {0, 01, 11}.
Kod 0 jest prefiksem 01. Innych par nie ma wiec
˛
nowa lista ma postać {0, 01, 11, 1}.
Teraz dla tej listy mamy 0 jako prefiks 01 i 1 jako
prefiks 11, ale sufiks 1 już dopisaliśmy do listy wiec
˛
lista sie˛ nie zmienia.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Weźmy kod {0, 01, 11}.
Kod 0 jest prefiksem 01. Innych par nie ma wiec
˛
nowa lista ma postać {0, 01, 11, 1}.
Teraz dla tej listy mamy 0 jako prefiks 01 i 1 jako
prefiks 11, ale sufiks 1 już dopisaliśmy do listy wiec
˛
lista sie˛ nie zmienia.
Kod jest wiec
˛ jednoznacznie dekodowalny.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Weźmy kod {0, 01, 10}.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Weźmy kod {0, 01, 10}.
Kod 0 jest prefiksem 01. Innych par nie ma wiec
˛
nowa lista ma postać {0, 01, 10, 1}.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Weźmy kod {0, 01, 10}.
Kod 0 jest prefiksem 01. Innych par nie ma wiec
˛
nowa lista ma postać {0, 01, 10, 1}.
Teraz dla tej listy mamy 0 jako prefiks 01 ale on już
jest na liście oraz 1 jako prefiks 10 ale sufiks 0 jest
równy kodowi 0.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Weźmy kod {0, 01, 10}.
Kod 0 jest prefiksem 01. Innych par nie ma wiec
˛
nowa lista ma postać {0, 01, 10, 1}.
Teraz dla tej listy mamy 0 jako prefiks 01 ale on już
jest na liście oraz 1 jako prefiks 10 ale sufiks 0 jest
równy kodowi 0.
Kod nie jest wiec
˛ jednoznacznie dekodowalny.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Kody prefiksowe
Kod w którym żadne słowo kodowe nie jest prefiksem
innego słowa kodowego.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Kody prefiksowe
Kod w którym żadne słowo kodowe nie jest prefiksem
innego słowa kodowego.
Łatwo zauważyć, że kod prefiksowy jest
jednoznacznie dekodowalny.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Nierówność Krafta-McMillana
Niech C bedzie
˛
kodem składajacym
˛
sie˛ z N słów o
długościach l1 , l2 , . . . , lN . Jeżeli C jest jednoznacznie
dekodowalny to
K (C) =
N
X
1
6 1.
2li
i=1
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Własności optymalnych kodów prefiksowych
Symbolom wystepuj
˛ acym
˛
cz˛eściej odpowiadaja˛
krótsze słowa kodowe.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Własności optymalnych kodów prefiksowych
Symbolom wystepuj
˛ acym
˛
cz˛eściej odpowiadaja˛
krótsze słowa kodowe.
Dwa najrzadziej wystepuj
˛ ace
˛ symbole maja˛ w kodzie
optymalnym słowa kodowe tej samej długości.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Konstruowanie kodów Huffmana
Kody dwóch najrzadziej wystepuj
˛ acych
˛
symboli
różnia˛ sie˛ tylko na ostatniej pozycji.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Konstruowanie kodów Huffmana
Kody dwóch najrzadziej wystepuj
˛ acych
˛
symboli
różnia˛ sie˛ tylko na ostatniej pozycji.
Algorytm rekurencyjny: rozważ dwa najrzadziej
wystepuj
˛ ace
˛ symbole rozróżniajac
˛ je na końcu przez
0 i 1. Połacz
˛ oba w jeden symbol pomocniczy
i rozważ teraz rekurencyjnie mniejszy alfabet.
Powtarzaj aż zostanie tylko jeden symbol.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
A = {a, b, c, d, e}, P(b) = 0, 4, P(a) = P(c) = 0, 2
i P(d) = P(e) = 0, 1.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
A = {a, b, c, d, e}, P(b) = 0, 4, P(a) = P(c) = 0, 2
i P(d) = P(e) = 0, 1.
Rozważamy d i e: kod(d) = kod(x)0,
kod(e) = kod(x)1 i P(x) = 0, 2.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
A = {a, b, c, d, e}, P(b) = 0, 4, P(a) = P(c) = 0, 2
i P(d) = P(e) = 0, 1.
Rozważamy d i e: kod(d) = kod(x)0,
kod(e) = kod(x)1 i P(x) = 0, 2.
A0 = {a, b, c, x}.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
A = {a, b, c, d, e}, P(b) = 0, 4, P(a) = P(c) = 0, 2
i P(d) = P(e) = 0, 1.
Rozważamy d i e: kod(d) = kod(x)0,
kod(e) = kod(x)1 i P(x) = 0, 2.
A0 = {a, b, c, x}.
Rozważamy c i x: kod(c) = kod(y )0,
kod(x) = kod(y )1 i P(y ) = 0, 4.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
A = {a, b, c, d, e}, P(b) = 0, 4, P(a) = P(c) = 0, 2
i P(d) = P(e) = 0, 1.
Rozważamy d i e: kod(d) = kod(x)0,
kod(e) = kod(x)1 i P(x) = 0, 2.
A0 = {a, b, c, x}.
Rozważamy c i x: kod(c) = kod(y )0,
kod(x) = kod(y )1 i P(y ) = 0, 4.
A00 = {a, b, y }.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
A = {a, b, c, d, e}, P(b) = 0, 4, P(a) = P(c) = 0, 2
i P(d) = P(e) = 0, 1.
Rozważamy d i e: kod(d) = kod(x)0,
kod(e) = kod(x)1 i P(x) = 0, 2.
A0 = {a, b, c, x}.
Rozważamy c i x: kod(c) = kod(y )0,
kod(x) = kod(y )1 i P(y ) = 0, 4.
A00 = {a, b, y }.
Rozważamy a i b: kod(a) = kod(z)0,
kod(b) = kod(z)1 i P(z) = 0, 6.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
A = {a, b, c, d, e}, P(b) = 0, 4, P(a) = P(c) = 0, 2
i P(d) = P(e) = 0, 1.
Rozważamy d i e: kod(d) = kod(x)0,
kod(e) = kod(x)1 i P(x) = 0, 2.
A0 = {a, b, c, x}.
Rozważamy c i x: kod(c) = kod(y )0,
kod(x) = kod(y )1 i P(y ) = 0, 4.
A00 = {a, b, y }.
Rozważamy a i b: kod(a) = kod(z)0,
kod(b) = kod(z)1 i P(z) = 0, 6.
A000 = {y , z}.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
A = {a, b, c, d, e}, P(b) = 0, 4, P(a) = P(c) = 0, 2
i P(d) = P(e) = 0, 1.
Rozważamy d i e: kod(d) = kod(x)0,
kod(e) = kod(x)1 i P(x) = 0, 2.
A0 = {a, b, c, x}.
Rozważamy c i x: kod(c) = kod(y )0,
kod(x) = kod(y )1 i P(y ) = 0, 4.
A00 = {a, b, y }.
Rozważamy a i b: kod(a) = kod(z)0,
kod(b) = kod(z)1 i P(z) = 0, 6.
A000 = {y , z}.
Rozważamy y i z: kod(y ) = 0 i kod(z) = 1.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
A = {a, b, c, d, e}, P(b) = 0, 4, P(a) = P(c) = 0, 2
i P(d) = P(e) = 0, 1.
Rozważamy d i e: kod(d) = kod(x)0,
kod(e) = kod(x)1 i P(x) = 0, 2.
A0 = {a, b, c, x}.
Rozważamy c i x: kod(c) = kod(y )0,
kod(x) = kod(y )1 i P(y ) = 0, 4.
A00 = {a, b, y }.
Rozważamy a i b: kod(a) = kod(z)0,
kod(b) = kod(z)1 i P(z) = 0, 6.
A000 = {y , z}.
Rozważamy y i z: kod(y ) = 0 i kod(z) = 1.
Rekonstruujemy kody: kod(a) = 10, kod(b) = 11,
kod(c) = 00, kod(d) = 010, kod(e) = 011.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Własności kodów Huffmana
Kod Huffmana jako drzewo - tworzenie takiego
drzewa jako algorytm tworzenia kodów Huffmana.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Własności kodów Huffmana
Kod Huffmana jako drzewo - tworzenie takiego
drzewa jako algorytm tworzenia kodów Huffmana.
Niejednoznaczność tworzenia kodów - istnieje cz˛esto
wiele kodów dla jednego źródła danych (ale
wszystkie maja˛ ta˛ sama˛ średnia˛ długość kodu).
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Własności kodów Huffmana
Kod Huffmana jako drzewo - tworzenie takiego
drzewa jako algorytm tworzenia kodów Huffmana.
Niejednoznaczność tworzenia kodów - istnieje cz˛esto
wiele kodów dla jednego źródła danych (ale
wszystkie maja˛ ta˛ sama˛ średnia˛ długość kodu).
Wariancja kodu, redundancja kodu.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Optymalność kodów Huffmana
Optymalny kod powinien spełniać nastepuj
˛ ace
˛ warunki:
Dla każdych dwóch liter a i b takich, że P(a) > P(b)
zachodzi lb > la .
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Optymalność kodów Huffmana
Optymalny kod powinien spełniać nastepuj
˛ ace
˛ warunki:
Dla każdych dwóch liter a i b takich, że P(a) > P(b)
zachodzi lb > la .
Dwie litery o najmniejszych prawdopodobieństwach
maja˛ słowa kodowe o tej samej, maksymalnej
długości.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Optymalność kodów Huffmana
Optymalny kod powinien spełniać nastepuj
˛ ace
˛ warunki:
Dla każdych dwóch liter a i b takich, że P(a) > P(b)
zachodzi lb > la .
Dwie litery o najmniejszych prawdopodobieństwach
maja˛ słowa kodowe o tej samej, maksymalnej
długości.
Z każdego wierzchołka wewnetrznego
˛
drzewa
odpowiadajacego
˛
kodowi optymalnemu powinny
wychodzić oba poddrzewa.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Optymalność kodów Huffmana
Optymalny kod powinien spełniać nastepuj
˛ ace
˛ warunki:
Dla każdych dwóch liter a i b takich, że P(a) > P(b)
zachodzi lb > la .
Dwie litery o najmniejszych prawdopodobieństwach
maja˛ słowa kodowe o tej samej, maksymalnej
długości.
Z każdego wierzchołka wewnetrznego
˛
drzewa
odpowiadajacego
˛
kodowi optymalnemu powinny
wychodzić oba poddrzewa.
Jeśli połaczymy
˛
dwa liście majace
˛ wspólnego ojca
i ten wierzchołek wewnetrzny
˛
potraktujemy jako liść
to uzyskane drzewo jest kodem optymalnym dla
nowego alfabetu jeśli pierwotne drzewo było
optymalne.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Długość kodów Huffmana
Dla źródła S spełniona jest nierówność
H(S) 6 l 6 H(S) + 1
gdzie l - średnia długość kodu Huffmana dla źródła S.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Rozszerzone i niebinarne kody Huffmana
Kody Huffmana możemy zastosować także do
bloków symboli.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Rozszerzone i niebinarne kody Huffmana
Kody Huffmana możemy zastosować także do
bloków symboli.
Kody Huffmana można tworzyć także dla innego niż
binarny alfabetu wyjściowego - prosta modyfikacja
algorytmu: zamiast dwóch symboli łaczymy
˛
m
symboli.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Dynamiczne kody Huffmana
Aby wykonać kodowanie Huffmana musimy znać
prawdopodobieństwa (cz˛estość wystepowania)
˛
liter.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Dynamiczne kody Huffmana
Aby wykonać kodowanie Huffmana musimy znać
prawdopodobieństwa (cz˛estość wystepowania)
˛
liter.
Co zrobić gdy dane napływaja˛ na bieżaco
˛ i nie
znamy statystyk?
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Dynamiczne kody Huffmana
Aby wykonać kodowanie Huffmana musimy znać
prawdopodobieństwa (cz˛estość wystepowania)
˛
liter.
Co zrobić gdy dane napływaja˛ na bieżaco
˛ i nie
znamy statystyk?
Kodować k + 1 symbol na podstawie statystyk k
symboli.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przygotowania
Dla alfabetu wejściowego mamy kodowanie stałej
długości (pomocnicze).
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przygotowania
Dla alfabetu wejściowego mamy kodowanie stałej
długości (pomocnicze).
Dla kodu Huffmana tworzymy na bieżaco
˛ jego
drzewo o nastepuj
˛ acych
˛
własnościach:
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przygotowania
Dla alfabetu wejściowego mamy kodowanie stałej
długości (pomocnicze).
Dla kodu Huffmana tworzymy na bieżaco
˛ jego
drzewo o nastepuj
˛ acych
˛
własnościach:
Każdy liść odpowiada symbolowi i zawiera wage˛ ilość dotychczasowych wystapie
˛ ń.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przygotowania
Dla alfabetu wejściowego mamy kodowanie stałej
długości (pomocnicze).
Dla kodu Huffmana tworzymy na bieżaco
˛ jego
drzewo o nastepuj
˛ acych
˛
własnościach:
Każdy liść odpowiada symbolowi i zawiera wage˛ ilość dotychczasowych wystapie
˛ ń.
Wierzchołki wewnetrzne
˛
maja˛ wage˛ bed
˛ ac
˛ a˛ suma˛
wag liści z poddrzew.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przygotowania
Dla alfabetu wejściowego mamy kodowanie stałej
długości (pomocnicze).
Dla kodu Huffmana tworzymy na bieżaco
˛ jego
drzewo o nastepuj
˛ acych
˛
własnościach:
Każdy liść odpowiada symbolowi i zawiera wage˛ ilość dotychczasowych wystapie
˛ ń.
Wierzchołki wewnetrzne
˛
maja˛ wage˛ bed
˛ ac
˛ a˛ suma˛
wag liści z poddrzew.
Każdy wierzchołek drzewa ma unikalny numer xi .
Numery te tworza˛ porzadek
˛
zgodny z wagami
wierzchołków (wieksza
˛
waga to wiekszy
˛
numer
wierzchołka). Dodatkowo rodzeństwo ma zawsze
dwa kolejne numery.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przygotowania
Dla alfabetu wejściowego mamy kodowanie stałej
długości (pomocnicze).
Dla kodu Huffmana tworzymy na bieżaco
˛ jego
drzewo o nastepuj
˛ acych
˛
własnościach:
Każdy liść odpowiada symbolowi i zawiera wage˛ ilość dotychczasowych wystapie
˛ ń.
Wierzchołki wewnetrzne
˛
maja˛ wage˛ bed
˛ ac
˛ a˛ suma˛
wag liści z poddrzew.
Każdy wierzchołek drzewa ma unikalny numer xi .
Numery te tworza˛ porzadek
˛
zgodny z wagami
wierzchołków (wieksza
˛
waga to wiekszy
˛
numer
wierzchołka). Dodatkowo rodzeństwo ma zawsze
dwa kolejne numery.
Na poczatku
˛
drzewo zawiera jeden wierzchołek o
wadze 0 i etykiecie NYT oznaczajacej
˛ że symbol nie
był jeszcze przesyłany.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Opis algorytmu
Pierwsze wystapienie
˛
symbolu a
Wyślij kod NYT i kod stałej długości dla nowego
symbolu.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Opis algorytmu
Pierwsze wystapienie
˛
symbolu a
Wyślij kod NYT i kod stałej długości dla nowego
symbolu.
Stary NYT podziel na dwa wierzchołki potomne nowy NYT i liść a, nadaj a wage˛ 1. Nadaj im
odpowiednie numery.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Opis algorytmu
Pierwsze wystapienie
˛
symbolu a
Wyślij kod NYT i kod stałej długości dla nowego
symbolu.
Stary NYT podziel na dwa wierzchołki potomne nowy NYT i liść a, nadaj a wage˛ 1. Nadaj im
odpowiednie numery.
Zmodyfikuj drzewo dodajac
˛ 1 do wierzchołków
wewnetrznych
˛
na ścieżce od a do korzenia
i przebudowujac
˛ drzewo tak aby było zgodne
z warunkami z poprzedniego slajdu.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Opis algorytmu
Kolejne wystapienie
˛
symbolu a
Znajdź liść a i wyślij odpowiadajacy
˛ mu kod.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Opis algorytmu
Kolejne wystapienie
˛
symbolu a
Znajdź liść a i wyślij odpowiadajacy
˛ mu kod.
Zwieksz
˛
wage˛ a o 1.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Opis algorytmu
Kolejne wystapienie
˛
symbolu a
Znajdź liść a i wyślij odpowiadajacy
˛ mu kod.
Zwieksz
˛
wage˛ a o 1.
Zmodyfikuj drzewo dodajac
˛ 1 do wierzchołków
wewnetrznych
˛
na ścieżce od a do korzenia
i przebudowujac
˛ drzewo tak aby było zgodne
z warunkami z poprzedniego slajdu.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Modyfikacja drzewa
Zbiór wierzchołków o tej samej wadze nazywamy
blokiem.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Modyfikacja drzewa
Zbiór wierzchołków o tej samej wadze nazywamy
blokiem.
Jeśli pierwszy wierzchołek od dołu nie ma
najwiekszego
˛
numeru w swoim bloku to zamieniamy
go z tym o najwiekszym
˛
numerze odpowiednio
przebudowujac
˛ drzewo z zachowaniem własności.
Nastepnie
˛
aktualizujemy wage˛ i patrzymy dalej
rekurencyjnie.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Modyfikacja drzewa
Zbiór wierzchołków o tej samej wadze nazywamy
blokiem.
Jeśli pierwszy wierzchołek od dołu nie ma
najwiekszego
˛
numeru w swoim bloku to zamieniamy
go z tym o najwiekszym
˛
numerze odpowiednio
przebudowujac
˛ drzewo z zachowaniem własności.
Nastepnie
˛
aktualizujemy wage˛ i patrzymy dalej
rekurencyjnie.
Kończymy jak dojdziemy do korzenia.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Mamy cztery litery z 26. (W drzewie maksymalnie 51
wierzchołków.)
a
d
r
v
00001 00100 10010 10110
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Mamy cztery litery z 26. (W drzewie maksymalnie 51
wierzchołków.)
a
d
r
v
00001 00100 10010 10110
Drzewo poczatkowo
˛
wyglada
˛ tak
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Pojawia sie˛ litera a.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Pojawia sie˛ litera a.
Wysyłamy kod NYT (ε) i stały kod a: 00001.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Pojawia sie˛ litera a.
Wysyłamy kod NYT (ε) i stały kod a: 00001.
Modyfikujemy drzewo:
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Pojawia sie˛ druga litera a.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Pojawia sie˛ druga litera a.
Wysyłamy kod a: 1 (z drzewa lewe krawedzie
˛
to 0 a
prawe to 1).
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Pojawia sie˛ druga litera a.
Wysyłamy kod a: 1 (z drzewa lewe krawedzie
˛
to 0 a
prawe to 1).
Modyfikujemy drzewo:
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Pojawia sie˛ litera r .
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Pojawia sie˛ litera r .
Wysyłamy kod NYT (0) i stały kod r : 010010.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Pojawia sie˛ litera r .
Wysyłamy kod NYT (0) i stały kod r : 010010.
Modyfikujemy drzewo:
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Pojawia sie˛ litera d.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Pojawia sie˛ litera d.
Wysyłamy kod NYT (00) i stały kod d: 0000100.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Pojawia sie˛ litera d.
Wysyłamy kod NYT (00) i stały kod d: 0000100.
Modyfikujemy drzewo:
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Pojawia sie˛ litera v .
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Pojawia sie˛ litera v .
Wysyłamy kod NYT (000) i stały kod v : 0010110.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Modyfikujemy drzewo:
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Przykład
Modyfikujemy drzewo:
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Podsumowanie - własności
Optymalność wśród kodów prefiksowych.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Podsumowanie - własności
Optymalność wśród kodów prefiksowych.
Kodowanie i dekodowanie w czasie liniowym
(szybkie).
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Podsumowanie - własności
Optymalność wśród kodów prefiksowych.
Kodowanie i dekodowanie w czasie liniowym
(szybkie).
Kody rozszerzone - kompromis miedzy
˛
optymalnościa˛ a wielkościa˛ systemu.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Podsumowanie - własności
Optymalność wśród kodów prefiksowych.
Kodowanie i dekodowanie w czasie liniowym
(szybkie).
Kody rozszerzone - kompromis miedzy
˛
optymalnościa˛ a wielkościa˛ systemu.
Możliwość implementacji dynamicznej.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana
Podsumowanie - własności
Optymalność wśród kodów prefiksowych.
Kodowanie i dekodowanie w czasie liniowym
(szybkie).
Kody rozszerzone - kompromis miedzy
˛
optymalnościa˛ a wielkościa˛ systemu.
Możliwość implementacji dynamicznej.
Zastosowanie: pkZIP, lha, gzip, zoo, arj, fragmenty
formatów JPEG i MPEG.
Filip Zagórski
Nierówność Krafta-McMillana, Kodowanie Huffmana

Podobne dokumenty