Kompresja bezstratna. Entropia. Kod Huffmana

Podobne dokumenty
Nierówność Krafta-McMillana, Kodowanie Huffmana

Podstawowe pojęcia. Teoria informacji

Kody Tunstalla. Kodowanie arytmetyczne

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

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

Teoria Informacji - wykład. Kodowanie wiadomości

Teoria informacji i kodowania Ćwiczenia

Elementy teorii informacji i kodowania

Temat: Algorytm kompresji plików metodą Huffmana

Definicja. Jeśli. wtedy

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 9,

Algorytmy kodowania entropijnego

Kompresja danych kodowanie Huffmana. Dariusz Sobczuk

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

Kodowanie i entropia

Kodowanie informacji

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

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

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

KODY SYMBOLI. Materiały KODA, A.Przelaskowski. Koncepcja przedziałów nieskończonego alfabetu

Kompresja Kodowanie arytmetyczne. Dariusz Sobczuk

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

Przetwarzanie i transmisja danych multimedialnych. Wykład 3 Kodowanie Shannona Fano i Huffmana. Przemysław Sękalski.

Kodowanie informacji

Wstęp do Informatyki

LZ77 LZ78. Kompresja danych. Tomasz Jurdziński. Wykład 5: kodowanie słownikowe

Algorytmy i struktury danych. wykład 8

0-0000, , , itd

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

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

mgr inż. Grzegorz Kraszewski SYSTEMY MULTIMEDIALNE wykład 4, strona 1. GOLOMBA I RICE'A

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

Kompresja danych - wprowadzenie. 1. Konieczno kompresji 2. Definicja, typy kompresji 3. Modelowanie 4. Podstawy teorii informacji 5.

Kodowanie i kompresja Tomasz Jurdziński Studia Wieczorowe Wykład Kody liniowe - kodowanie w oparciu o macierz parzystości

Teoria Informacji i Metody Kompresji Danych

Algorytmy kompresji. Kodowanie Huffmana, kodowanie arytmetyczne

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 6

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

Kwantyzacja wektorowa. Kodowanie różnicowe.

Modelowanie motywów łańcuchami Markowa wyższego rzędu

Kodowanie predykcyjne

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Algorytmy i Struktury Danych

0 + 0 = 0, = 1, = 1, = 0.

Metody teorii gier. ALP520 - Wykład z Algorytmów Probabilistycznych p.2

1.1. Pozycyjne systemy liczbowe

Algorytmy i struktury danych

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

E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne

ZADANIE 1. Rozwiązanie:

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 11,

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

Kodowanie transformacyjne. Plan 1. Zasada 2. Rodzaje transformacji 3. Standard JPEG

Matematyka dyskretna - 7.Drzewa

Wstęp do Programowania potok funkcyjny

ARCHITEKRURA KOMPUTERÓW Kodowanie liczb ze znakiem

Entropia to wielkość określająca liczbę bitów informacji zawartej w danej wiadomości lub źródle. Spełnia ona trzy naturalne warunki: I(s) jest

Przetwarzanie i transmisja danych multimedialnych. Wykład 2 Podstawy kompresji. Przemysław Sękalski.

Joint Photographic Experts Group

Według raportu ISO z 1988 roku algorytm JPEG składa się z następujących kroków: 0.5, = V i, j. /Q i, j

Podstawy Informatyki: Kody. Korekcja błędów.

Kody blokowe Wykład 2, 10 III 2011

Podstawy kompresji danych

Przetwarzanie i transmisja danych multimedialnych. Wykład 5 Kodowanie słownikowe. Przemysław Sękalski.

TEORETYCZNE PODSTAWY INFORMATYKI

Kodowanie Shannona-Fano

1 Działania na zbiorach

Kody Huffmana. Konrad Wypyski. 11 lutego 2006 roku

Matematyka dyskretna

Wybrane metody kompresji obrazów

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Sortowanie. Bartman Jacek Algorytmy i struktury

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Algorytmy i struktury danych. Wykład 4

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

JAO - lematy o pompowaniu dla jezykow bezkontekstowy

Matematyczne Podstawy Informatyki

7a. Teoria drzew - kodowanie i dekodowanie

Metody Kompilacji Wykład 3

Tadeusz Pankowski

Zapis liczb binarnych ze znakiem

Metoda Tablic Semantycznych

Notatki z Podstaw kodowania i kryptografii. switch486 WIZ : PWr na podstawie folii z wykładu i ćwiczeń dr inż. E. Kukli Złożone W Systemie L A TEX

ALGORYTMY I STRUKTURY DANYCH

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Założenia i obszar zastosowań. JPEG - algorytm kodowania obrazu. Geneza algorytmu KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

Sortowanie bąbelkowe

PLAN WYKŁADU BAZY DANYCH INDEKSY - DEFINICJE. Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew

wagi cyfry pozycje

7. CIĄGI. WYKŁAD 5. Przykłady :

Kodowanie transformujace. Kompresja danych. Tomasz Jurdziński. Wykład 11: Transformaty i JPEG

Metoda Karnaugh. B A BC A

Programowanie w Logice Gramatyki metamorficzne. Przemysław Kobylański na podstawie [CM2003] i [SS1994]

Temat 7. Dekodery, enkodery

Łyżwy - omówienie zadania

Transkrypt:

Kompresja bezstratna. Entropia. Kod Huffmana Kodowanie i bezpieczeństwo informacji - Wykład 10 29 kwietnia 2013

Teoria informacji Jeśli P(A) jest prawdopodobieństwem wystapienia informacji A to niech i(a) = log 1 P(A) będzie miara tej informacji. = log P(A)

Teoria informacji Jeśli P(A) jest prawdopodobieństwem wystapienia informacji A to niech i(a) = log 1 P(A) będzie miara tej informacji. Jeśli A i B sa niezależne, to i(ab) = log = log P(A) 1 P(AB) = log 1 P(A)P(B) = = log 1 P(A) + log 1 P(B) = i(a) + i(b)

Teoria informacji Jeśli P(A) jest prawdopodobieństwem wystapienia informacji A to niech i(a) = log 1 P(A) będzie miara tej informacji. Jeśli A i B sa niezależne, to i(ab) = log = log P(A) 1 P(AB) = log 1 P(A)P(B) = = log 1 P(A) + log 1 P(B) = i(a) + i(b) Podstawa logarytmu jest 2 a jednostka informacji bit.

Teoria informacji Załóżmy, że mamy zbiór wiadomości A 1,..., A n, które pojawiaja się z prawdopodobieństwami P(A 1 ),..., P(A n ) ( n i=1 P(A i) = 1).

Teoria informacji Załóżmy, że mamy zbiór wiadomości A 1,..., A n, które pojawiaja się z prawdopodobieństwami P(A 1 ),..., P(A n ) ( n i=1 P(A i) = 1). Średnia informacja w tym zbiorze jest określona wzorem n H = P(A i )i(a i ) i=1 Wielkość tę nazywamy entropia.

Teoria informacji Załóżmy, że mamy zbiór wiadomości A 1,..., A n, które pojawiaja się z prawdopodobieństwami P(A 1 ),..., P(A n ) ( n i=1 P(A i) = 1). Średnia informacja w tym zbiorze jest określona wzorem n H = P(A i )i(a i ) i=1 Wielkość tę nazywamy entropia. Kody jednoznacznie dekodowalne w modelu z niezależnymi wystapieniami symboli musza mieć średnia długość co najmniej równa entropii.

Przykład Weźmy ciag 1 2 3 2 3 4 5 4 5 6 7 8 9 8 9 10

Przykład Weźmy ciag 1 2 3 2 3 4 5 4 5 6 7 8 9 8 9 10 P(1) = P(6) = P(7) = P(10) = 1 16, P(2) = P(3) = P(4) = P(5) = P(8) = P(9) = 2 16

Przykład Weźmy ciag 1 2 3 2 3 4 5 4 5 6 7 8 9 8 9 10 P(1) = P(6) = P(7) = P(10) = 1, 16 P(2) = P(3) = P(4) = P(5) = P(8) = P(9) = 2 16 H = 10 i=1 P(i) log P(i) = 3, 25

Przykład Weźmy ciag 1 2 3 2 3 4 5 4 5 6 7 8 9 8 9 10 P(1) = P(6) = P(7) = P(10) = 1, 16 P(2) = P(3) = P(4) = P(5) = P(8) = P(9) = 2 16 H = 10 i=1 P(i) log P(i) = 3, 25 Najlepszy schemat kodujacy ten ciag wymaga 3,25 bitu na znak.

Przykład Weźmy ciag 1 2 3 2 3 4 5 4 5 6 7 8 9 8 9 10 P(1) = P(6) = P(7) = P(10) = 1, 16 P(2) = P(3) = P(4) = P(5) = P(8) = P(9) = 2 16 H = 10 i=1 P(i) log P(i) = 3, 25 Najlepszy schemat kodujacy ten ciag wymaga 3,25 bitu na znak. Jeśli jednak założymy, że elementy ciagu nie sa niezależne i zastapimy ciag różnicami to otrzymamy 1 1 1-1 1 1 1-1 1 1 1 1 1-1 1 1

Przykład Weźmy ciag 1 2 1 2 3 3 3 3 1 2 3 3 3 3 1 2 3 3 1 2

Przykład Weźmy ciag 1 2 1 2 3 3 3 3 1 2 3 3 3 3 1 2 3 3 1 2 Prawdopodobieństwa wynosza: P(1) = P(2) = 1 4 i P(3) = 1. 2

Przykład Weźmy ciag 1 2 1 2 3 3 3 3 1 2 3 3 3 3 1 2 3 3 1 2 Prawdopodobieństwa wynosza: P(1) = P(2) = 1 4 i P(3) = 1. 2 Entropia jest równa 1,5 bitu na znak.

Przykład Weźmy ciag 1 2 1 2 3 3 3 3 1 2 3 3 3 3 1 2 3 3 1 2 Prawdopodobieństwa wynosza: P(1) = P(2) = 1 4 i P(3) = 1. 2 Entropia jest równa 1,5 bitu na znak. Jeśli jednak weźmiemy bloki złożone z dwóch znaków to P(12) = 1 i P(33) = 1 czyli entropia jest 2 2 równa 1 bit na parę (0,5 bitu na znak).

Test na jednoznaczna dekodowalność Kod a jest prefiksem kodu b jeśli b jest postaci ax. x nazywamy sufiksem b względem a.

Test na jednoznaczna dekodowalność Kod a jest prefiksem kodu b jeśli b jest postaci ax. x nazywamy sufiksem b względem a. Algorytm Tworzymy listę 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 procedurę 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).

Przykład Weźmy kod {0, 01, 11}.

Przykład Weźmy kod {0, 01, 11}. Kod 0 jest prefiksem 01. Innych par nie ma więc nowa lista ma postać {0, 01, 11, 1}.

Przykład Weźmy kod {0, 01, 11}. Kod 0 jest prefiksem 01. Innych par nie ma więc 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 więc lista się nie zmienia.

Przykład Weźmy kod {0, 01, 11}. Kod 0 jest prefiksem 01. Innych par nie ma więc 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 więc lista się nie zmienia. Kod jest więc jednoznacznie dekodowalny.

Przykład Weźmy kod {0, 01, 10}.

Przykład Weźmy kod {0, 01, 10}. Kod 0 jest prefiksem 01. Innych par nie ma więc nowa lista ma postać {0, 01, 10, 1}.

Przykład Weźmy kod {0, 01, 10}. Kod 0 jest prefiksem 01. Innych par nie ma więc 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.

Przykład Weźmy kod {0, 01, 10}. Kod 0 jest prefiksem 01. Innych par nie ma więc 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 więc jednoznacznie dekodowalny.

Kody prefiksowe Kod w którym żadne słowo kodowe nie jest prefiksem innego słowa kodowego.

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.

Nierówność Krafta-McMillana Niech C będzie kodem składajacym się z N słów o długościach l 1, l 2,..., l N. Jeżeli C jest jednoznacznie dekodowalny to K (C) = N 1 2 l i i=1 1.

Kody Shannon-Fano Niech symbole a i występuja odpowiednio z prawdopodobieństwami p i.

Kody Shannon-Fano Niech symbole a i występuja odpowiednio z prawdopodobieństwami p i. Weźmy długości kodów l i = log p i.

Kody Shannon-Fano Niech symbole a i występuja odpowiednio z prawdopodobieństwami p i. Weźmy długości kodów l i = log p i. Długości l i spełniaja nierówność Krafta-McMillana. N 1 2 l i i=1 N 1 2 log p i i=1 = N p i = 1 i=1

Kody Shannon-Fano Niech symbole a i występuja odpowiednio z prawdopodobieństwami p i. Weźmy długości kodów l i = log p i. Długości l i spełniaja nierówność Krafta-McMillana. N 1 2 l i i=1 N 1 2 log p i i=1 = N p i = 1 i=1 Istnieje więc kod prefiksowy o takich długościach.

Kody Shannon-Fano Niech symbole a i występuja odpowiednio z prawdopodobieństwami p i. Weźmy długości kodów l i = log p i. Długości l i spełniaja nierówność Krafta-McMillana. N 1 2 l i i=1 N 1 2 log p i i=1 = N p i = 1 i=1 Istnieje więc kod prefiksowy o takich długościach. Łatwo zauważyć, że średnia długość tego kodu jest nie większa niż entropia plus 1.

Konstrukcja kodu o podanych długościach Niech l 1 l 2... l N.

Konstrukcja kodu o podanych długościach Niech l 1 l 2... l N. Definiujemy pomocnicze w 1, w 2,..., w N jako j 1 w 1 = 0 w j = i=1 2 l j l i

Konstrukcja kodu o podanych długościach Niech l 1 l 2... l N. Definiujemy pomocnicze w 1, w 2,..., w N jako j 1 w 1 = 0 w j = i=1 2 l j l i Binarna reprezentacja w j dla j > 1 zajmuje log w j bitów.

Konstrukcja kodu o podanych długościach Niech l 1 l 2... l N. Definiujemy pomocnicze w 1, w 2,..., w N jako j 1 w 1 = 0 w j = i=1 2 l j l i Binarna reprezentacja w j dla j > 1 zajmuje log w j bitów. Liczba bitów w j jest mniejsza lub równa l j. Dla w 1 to oczywiste. [ j 1 ] [ ] j 1 log w j = log 2 l j l i = log 2 l j 2 l i = = l j + log i=1 [ j 1 2 l i i=1 ] l j i=1

Konstrukcja kodu o podanych długościach Kodowanie wyglada następujaco: Jeżeli log w j = l j to j-te słowo kodowe jest binarna reprezentacja w j. Jeżeli jest mniejsze to reprezentację w j uzupełniamy odpowiednia liczba zer z lewej strony.

Konstrukcja kodu o podanych długościach Czy to jest kod prefiksowy? Załóżmy, że c j jest prefiksem c k i j < k. Wtedy l j pierwszych bitów c k tworzy c j czyli w j = w k 2 l k l j

Konstrukcja kodu o podanych długościach Czy to jest kod prefiksowy? Załóżmy, że c j jest prefiksem c k i j < k. Wtedy l j pierwszych bitów c k tworzy c j czyli w j = Ale w k = k 1 i=1 2l k l i. w k 2 l k l j

Konstrukcja kodu o podanych długościach Czy to jest kod prefiksowy? Załóżmy, że c j jest prefiksem c k i j < k. Wtedy l j pierwszych bitów c k tworzy c j czyli w j = Ale w k = k 1 i=1 2l k l i. Czyli w k 2 l k l j = w k 2 l k l j k 1 k 1 2 l j l i = w j + 2 l j l i = i=1 = w j + 2 0 + k 1 i=j+1 i=j 2 l j l i w j + 1

Konstrukcja kodu o podanych długościach Czy to jest kod prefiksowy? Załóżmy, że c j jest prefiksem c k i j < k. Wtedy l j pierwszych bitów c k tworzy c j czyli w j = Ale w k = k 1 i=1 2l k l i. Czyli w k 2 l k l j = w k 2 l k l j k 1 k 1 2 l j l i = w j + 2 l j l i = i=1 = w j + 2 0 + k 1 i=j+1 i=j 2 l j l i w j + 1 Sprzeczne z założeniem, że c j jest prefiksem c k.

Przykład Weźmy a, b, c, d z prawdopodobieństwami 1 3, 1 4, 1 4, 1 6.

Przykład Weźmy a, b, c, d z prawdopodobieństwami 1 3, 1 4, 1 4, 1 6. Odpowiednio długości kodów Shannon-Fano wynosza 2, 2, 2, 3.

Przykład Weźmy a, b, c, d z prawdopodobieństwami 1 3, 1 4, 1 4, 1 6. Odpowiednio długości kodów Shannon-Fano wynosza 2, 2, 2, 3. Wyliczamy w a = 0, w b = 1, w c = 2, w d = 6.

Przykład Weźmy a, b, c, d z prawdopodobieństwami 1 3, 1 4, 1 4, 1 6. Odpowiednio długości kodów Shannon-Fano wynosza 2, 2, 2, 3. Wyliczamy w a = 0, w b = 1, w c = 2, w d = 6. Kody to odpowiednio kod(a) = 00, kod(b) = 01, kod(c) = 10, kod(d) = 110.

Własności optymalnych kodów prefiksowych Symbolom występujacym częściej odpowiadaja krótsze słowa kodowe.

Własności optymalnych kodów prefiksowych Symbolom występujacym częściej odpowiadaja krótsze słowa kodowe. Dwa najrzadziej występujace symbole maja w kodzie optymalnym słowa kodowe tej samej długości.

Konstruowanie kodów Huffmana Kody dwóch najrzadziej występujacych symboli różnia się tylko na ostatniej pozycji.

Konstruowanie kodów Huffmana Kody dwóch najrzadziej występujacych symboli różnia się tylko na ostatniej pozycji. Algorytm rekurencyjny: rozważ dwa najrzadziej występujace 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.

Własności kodów Huffmana Kod Huffmana jako drzewo - tworzenie takiego drzewa jako algorytm tworzenia kodów 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ęsto wiele kodów dla jednego źródła danych (ale wszystkie maja ta sama średnia długość kodu).

Optymalność kodów Huffmana Optymalny kod powinien spełniać następujace warunki: Dla każdych dwóch liter a i b takich, że P(a) P(b) zachodzi l b l a.

Optymalność kodów Huffmana Optymalny kod powinien spełniać następujace warunki: Dla każdych dwóch liter a i b takich, że P(a) P(b) zachodzi l b l a. Dwie litery o najmniejszych prawdopodobieństwach maja słowa kodowe o tej samej, maksymalnej długości.

Optymalność kodów Huffmana Optymalny kod powinien spełniać następujace warunki: Dla każdych dwóch liter a i b takich, że P(a) P(b) zachodzi l b l a. Dwie litery o najmniejszych prawdopodobieństwach maja słowa kodowe o tej samej, maksymalnej długości. Z każdego wierzchołka wewnętrznego drzewa odpowiadajacego kodowi optymalnemu powinny wychodzić oba poddrzewa.

Optymalność kodów Huffmana Optymalny kod powinien spełniać następujace warunki: Dla każdych dwóch liter a i b takich, że P(a) P(b) zachodzi l b l a. Dwie litery o najmniejszych prawdopodobieństwach maja słowa kodowe o tej samej, maksymalnej długości. Z każdego wierzchołka wewnętrznego drzewa odpowiadajacego kodowi optymalnemu powinny wychodzić oba poddrzewa. Jeśli połaczymy dwa liście majace wspólnego ojca i ten wierzchołek wewnętrzny potraktujemy jako liść to uzyskane drzewo jest kodem optymalnym dla nowego alfabetu jeśli pierwotne drzewo było optymalne.

Długość kodów Huffmana Dla źródła S spełniona jest nierówność H(S) l H(S) + 1 gdzie l - średnia długość kodu Huffmana dla źródła S.

Dynamiczne kody Huffmana Aby wykonać kodowanie Huffmana musimy znać prawdopodobieństwa (częstość występowania) liter.

Dynamiczne kody Huffmana Aby wykonać kodowanie Huffmana musimy znać prawdopodobieństwa (częstość występowania) liter. Co zrobić gdy dane napływaja na bieżaco i nie znamy statystyk?

Dynamiczne kody Huffmana Aby wykonać kodowanie Huffmana musimy znać prawdopodobieństwa (częstość występowania) liter. Co zrobić gdy dane napływaja na bieżaco i nie znamy statystyk? Kodować k + 1 symbol na podstawie statystyk k symboli.

Przygotowania Dla alfabetu wejściowego mamy kodowanie stałej długości (pomocnicze).

Przygotowania Dla alfabetu wejściowego mamy kodowanie stałej długości (pomocnicze). Dla kodu Huffmana tworzymy na bieżaco jego drzewo o następujacych własnościach:

Przygotowania Dla alfabetu wejściowego mamy kodowanie stałej długości (pomocnicze). Dla kodu Huffmana tworzymy na bieżaco jego drzewo o następujacych własnościach: Każdy liść odpowiada symbolowi i zawiera wagę - ilość dotychczasowych wystapień.

Przygotowania Dla alfabetu wejściowego mamy kodowanie stałej długości (pomocnicze). Dla kodu Huffmana tworzymy na bieżaco jego drzewo o następujacych własnościach: Każdy liść odpowiada symbolowi i zawiera wagę - ilość dotychczasowych wystapień. Wierzchołki wewnętrzne maja wagę będac a suma wag liści z poddrzew.

Przygotowania Dla alfabetu wejściowego mamy kodowanie stałej długości (pomocnicze). Dla kodu Huffmana tworzymy na bieżaco jego drzewo o następujacych własnościach: Każdy liść odpowiada symbolowi i zawiera wagę - ilość dotychczasowych wystapień. Wierzchołki wewnętrzne maja wagę będac a suma wag liści z poddrzew. Każdy wierzchołek drzewa ma unikalny numer x i. Numery te tworza porzadek zgodny z wagami wierzchołków (większa waga to większy numer wierzchołka). Dodatkowo rodzeństwo ma zawsze dwa kolejne numery.

Przygotowania Dla alfabetu wejściowego mamy kodowanie stałej długości (pomocnicze). Dla kodu Huffmana tworzymy na bieżaco jego drzewo o następujacych własnościach: Każdy liść odpowiada symbolowi i zawiera wagę - ilość dotychczasowych wystapień. Wierzchołki wewnętrzne maja wagę będac a suma wag liści z poddrzew. Każdy wierzchołek drzewa ma unikalny numer x i. Numery te tworza porzadek zgodny z wagami wierzchołków (większa waga to większy 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.

Opis algorytmu Pierwsze wystapienie symbolu a Wyślij kod NYT i kod stałej długości dla nowego symbolu.

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 wagę 1. Nadaj im odpowiednie numery.

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 wagę 1. Nadaj im odpowiednie numery. Zmodyfikuj drzewo dodajac 1 do wierzchołków wewnętrznych na ścieżce od a do korzenia i przebudowujac drzewo tak aby było zgodne z warunkami z poprzedniego slajdu.

Opis algorytmu Kolejne wystapienie symbolu a Znajdź liść a i wyślij odpowiadajacy mu kod.

Opis algorytmu Kolejne wystapienie symbolu a Znajdź liść a i wyślij odpowiadajacy mu kod. Zwiększ wagę a o 1.

Opis algorytmu Kolejne wystapienie symbolu a Znajdź liść a i wyślij odpowiadajacy mu kod. Zwiększ wagę a o 1. Zmodyfikuj drzewo dodajac 1 do wierzchołków wewnętrznych na ścieżce od a do korzenia i przebudowujac drzewo tak aby było zgodne z warunkami z poprzedniego slajdu.

Modyfikacja drzewa Zbiór wierzchołków o tej samej wadze nazywamy blokiem.

Modyfikacja drzewa Zbiór wierzchołków o tej samej wadze nazywamy blokiem. Jeśli pierwszy wierzchołek od dołu nie ma największego numeru w swoim bloku to zamieniamy go z tym o największym numerze odpowiednio przebudowujac drzewo z zachowaniem własności. Następnie aktualizujemy wagę i patrzymy dalej rekurencyjnie.

Modyfikacja drzewa Zbiór wierzchołków o tej samej wadze nazywamy blokiem. Jeśli pierwszy wierzchołek od dołu nie ma największego numeru w swoim bloku to zamieniamy go z tym o największym numerze odpowiednio przebudowujac drzewo z zachowaniem własności. Następnie aktualizujemy wagę i patrzymy dalej rekurencyjnie. Kończymy jak dojdziemy do korzenia.

Przykład http://mgc.im.pwr.wroc.pl/dypl/tol/

Przykład http://mgc.im.pwr.wroc.pl/dypl/tol/ Mamy cztery litery z 26. (W drzewie maksymalnie 51 wierzchołków.) a d r v 00001 00100 10010 10110

Przykład http://mgc.im.pwr.wroc.pl/dypl/tol/ Mamy cztery litery z 26. (W drzewie maksymalnie 51 wierzchołków.) a d r v 00001 00100 10010 10110 Drzewo poczatkowo wyglada tak

Przykład Pojawia się litera a.

Przykład Pojawia się litera a. Wysyłamy kod NYT (ε) i stały kod a: 00001.

Przykład Pojawia się litera a. Wysyłamy kod NYT (ε) i stały kod a: 00001. Modyfikujemy drzewo:

Przykład Pojawia się druga litera a.

Przykład Pojawia się druga litera a. Wysyłamy kod a: 1 (z drzewa lewe krawędzie to 0 a prawe to 1).

Przykład Pojawia się druga litera a. Wysyłamy kod a: 1 (z drzewa lewe krawędzie to 0 a prawe to 1). Modyfikujemy drzewo:

Przykład Pojawia się litera r.

Przykład Pojawia się litera r. Wysyłamy kod NYT (0) i stały kod r: 010010.

Przykład Pojawia się litera r. Wysyłamy kod NYT (0) i stały kod r: 010010. Modyfikujemy drzewo:

Przykład Pojawia się litera d.

Przykład Pojawia się litera d. Wysyłamy kod NYT (00) i stały kod d: 0000100.

Przykład Pojawia się litera d. Wysyłamy kod NYT (00) i stały kod d: 0000100. Modyfikujemy drzewo:

Przykład Pojawia się litera v.

Przykład Pojawia się litera v. Wysyłamy kod NYT (000) i stały kod v: 0010110.

Przykład Modyfikujemy drzewo:

Przykład Modyfikujemy drzewo:

Podsumowanie - własności Optymalność wśród kodów prefiksowych.

Podsumowanie - własności Optymalność wśród kodów prefiksowych. Kodowanie i dekodowanie w czasie liniowym (szybkie).

Podsumowanie - własności Optymalność wśród kodów prefiksowych. Kodowanie i dekodowanie w czasie liniowym (szybkie). Kody rozszerzone - kompromis między optymalnościa a wielkościa systemu.

Podsumowanie - własności Optymalność wśród kodów prefiksowych. Kodowanie i dekodowanie w czasie liniowym (szybkie). Kody rozszerzone - kompromis między optymalnościa a wielkościa systemu. Możliwość implementacji dynamicznej.

Podsumowanie - własności Optymalność wśród kodów prefiksowych. Kodowanie i dekodowanie w czasie liniowym (szybkie). Kody rozszerzone - kompromis między optymalnościa a wielkościa systemu. Możliwość implementacji dynamicznej. Zastosowanie: pkzip, lha, gzip, zoo, arj, fragmenty formatów JPEG i MPEG.