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

Podobne dokumenty
Kodowanie i entropia

Kody Tunstalla. Kodowanie arytmetyczne

Kompresja bezstratna. Entropia. Kod Huffmana

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 9,

Nierówność Krafta-McMillana, Kodowanie Huffmana

Kodowanie informacji

Elementy teorii informacji i kodowania

Teoria Informacji - wykład. Kodowanie wiadomości

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

Temat: Algorytm kompresji plików metodą Huffmana

Teoria informacji i kodowania Ćwiczenia

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

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

0-0000, , , itd

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

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

Definicja. Jeśli. wtedy

Kompresja Kodowanie arytmetyczne. Dariusz Sobczuk

Kompresja danych kodowanie Huffmana. Dariusz Sobczuk

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

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

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

Podstawowe pojęcia. Teoria informacji

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

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

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

Algorytmy kodowania entropijnego

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

Algorytmy kompresji. Kodowanie Huffmana, kodowanie arytmetyczne

Kody blokowe Wykład 2, 10 III 2011

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

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

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 11,

Teoria Informacji i Metody Kompresji Danych

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

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

Kodowanie Shannona-Fano

Matematyka dyskretna

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

Kodowanie informacji

Ćwiczenia z metodyki nauczania rachunku prawdopodobieństwa

ZADANIE 1. Rozwiązanie:

Maksymalne powtórzenia w tekstach i zerowa intensywność entropii

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

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

Modulacja i kodowanie. Labolatorium. Kodowanie źródłowe Kod Huffman a

dr inż. Jacek Naruniec

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

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

Uzupełnienia dotyczące zbiorów uporządkowanych (3 lutego 2011).

Dowód pierwszego twierdzenia Gödela o. Kołmogorowa

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

Kompresja danych DKDA (7)

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

Podstawy kompresji danych

Podręcznik. Wzór Shannona

Jednym z najprostszych sposobów porządkowania jest technika stosowana przy sortowaniu listów:

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

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

AKD Metody słownikowe

Statystyka i eksploracja danych

Kodowanie predykcyjne

O oszczędnym dziennikarzu, czyli czym jest

Statystyka i opracowanie danych Podstawy wnioskowania statystycznego. Prawo wielkich liczb. Centralne twierdzenie graniczne. Estymacja i estymatory

Dyskretne procesy stacjonarne o nieskończonej entropii nadwyżkowej

A i. i=1. i=1. i=1. i=1. W dalszej części skryptu będziemy mieli najczęściej do czynienia z miarami określonymi na rodzinach, które są σ - algebrami.

domykanie relacji, relacja równoważności, rozkłady zbiorów

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

Metody probabilistyczne

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

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

Matematyka dyskretna. Wykład 11: Kryptografia z kluczem publicznym. Gniewomir Sarbicki

6.4 Podstawowe metody statystyczne

Algorytmy w teorii liczb

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

Metody probabilistyczne

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 6

Wstęp do Techniki Cyfrowej... Teoria automatów

Logarytmy. Funkcje logarytmiczna i wykładnicza. Równania i nierówności wykładnicze i logarytmiczne.

Jak zadać dobre pytanie, czyli czym jest informacja i jak ja

Prawdopodobieństwo i statystyka

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

MNRP r. 1 Aksjomatyczna definicja prawdopodobieństwa (wykład) Grzegorz Kowalczyk

urządzenia: awaria układów ochronnych, spowodowanie awarii oprogramowania

1. Synteza automatów Moore a i Mealy realizujących zadane przekształcenie 2. Transformacja automatu Moore a w automat Mealy i odwrotnie

Zaawansowane algorytmy i struktury danych

Wykład 11: Martyngały: definicja, twierdzenia o zbieżności

Indukcja matematyczna

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

Metody numeryczne I Równania nieliniowe

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

wiadomość komunikat - informacja Caius Julius Cesar Człowiek zasztyletowany przez senatorów na forum Romanum w Idy Marcowe roku DCCIX ab urbe condita

Wstęp do Programowania potok funkcyjny

Iteracyjne rozwiązywanie równań

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

Algorytmy i struktury danych. wykład 8

TIMKoD - Lab 1 - Przybliżenie języka naturalnego

komputery? Andrzej Skowron, Hung Son Nguyen Instytut Matematyki, Wydział MIM, UW

Lista 0. Kamil Matuszewski 1 marca 2016

Przepustowość kanału, odczytywanie wiadomości z kanału, poprawa wydajności kanału.

Transkrypt:

Kody Marek Śmieja Teoria informacji 1 / 35

Entropia Entropia określa minimalną statystyczną długość kodowania (przyjmijmy dla prostoty że alfabet kodowy A = {0, 1}). Definicja Niech X = {x 1,..., x n } będzie dyskretną przestrzenią probabilistyczną, gdzie p i = p(x i ) jest prawdopodobieństwem otrzymania x i. Wtedy entropia X (rozkładu p 1,..., p n na X ) wyraża się wzorem: h(x ) = h(p 1,..., p n ) = i p i ( log 2 p i ). Będziemy pisać zamiennie h(zbiór) = h(rozkład pr.) = h(zmienna los) 2 / 35

Informacja Definicja Ilość informacji zawarta w elemencie x jest równa i(x) := log p(x). Jednostką informacji jest bit, jeśli rozważamy logarytm o podstawie 2. Ilość informacji jest równa ilości bitów potrzebnych do jej zapisania. Jeśli x i y są niezależne, to mamy addytywność informacji: i(xy) = log p(xy) = log p(x)p(y) log p(x) log p(y) = i(x) + i(y). Entropia to średnia ilość informacji zawarta w zbiorze danych. Im entropia większa tym większa jest niepewność co do danych. 3 / 35

Szacowanie z dołu Wniosek Jeśli źródło jest bez pamięci, tzn. aktualnie generowany symbol nie zależy od poprzednich, to statystyczna długość dowolnego prefiksowego kodu nie może być niższa niż entropia źródła: L h(x ) Wynika to z procedury minimalizacyjnej Ciekawsze jest, że można pokazać również oszacowanie na długość kodu z góry Jeśli występują zależności pomiędzy symbolami, to można zbudować efektywniejszy kod (kodowanie kilu symbnoli na raz) Wówczas można dokonać preprocessingu danych w ich uproszczenia i likwidacji zależności 4 / 35

Górne oszacowanie Weźmy kodowanie o długościach l i = log n p i. Z tw. Krafta można zbudować kod realizujący te długości. Wtedy: h(p 1,..., p n ) = i p i ( log 2 p i ) i p i l i i p i ( log 2 p i + 1) = i p i ( log 2 p i ) + i p i = h(p 1,..., p n ) + 1 Wniosek Można zbudować prefiksowy kod binarny na X, którego długość kodu spełnia: h(x ) L < h(x ) + 1 5 / 35

Rozkład dwupunktowy X = {x, y}, z rozkładem p(x) = p, p(y) = 1 p. max h(p, 1 p) = log 2 = 1 dla p = 1 2. Aby przesłać jeden symbol potrzebujemy średnio 1 bit 6 / 35

Wnioski W ogólności jednostajny rozkład maksymalizuje entropię (niepewność) dowód trudniejszy Dla n-elementowego źródła S, mamy h(s) log 2 n Jeśli jeden symbol jest bardziej prawdopodobny od drugiego to tą długość można zmniejszyć 7 / 35

Kodowanie Shannona Kodowanie, w którym długość kodu każdego symbolu x k wynosi l k = log 2 p k. Nie jest optymalne, bo kodowanie Huffmana daje niższą średnią długość Długość kodu każdego symbolu znana, co pozwala na jego użycie w wielu własnościach i przykładach 8 / 35

Algorytm Ustawiamy symbole x i według malejących prawdopodobieństw p i. Innymi słowy zakładamy, że p 1... p m. Jako długość kodu x i bierzemy l i = log 2 p i Aby poznać jawny wzór na kod definiujemy prawd. kumulatywne: P k = i<k p i Zauważmy, że P k < 1. Jako kod Q k dla x k bierzemy pierwsze l k cyfr po przecinku z rozwinięcia binarnego liczby P k Pamiętamy słowinik kodów w nagłówku Kody różnych symboli są różne (ćwiczenie) 9 / 35

Przykład S = {a, b, c, d}, P = {0.45, 0.3, 0.2, 0.05} l a = log 0.45 = 2, l b = 2, l c = 3, l d = 5 P a = 0, P b = 0.45, P c = 0.75, P d = 0.95 a = 0.00000, b = 0.01110, c = 0.11000, d = 0.11110 a = 00, b = 01, c = 110, d = 11110 Efektywność = (entropia źródła) / (średnia długość kodu) =... 10 / 35

Własności Kodowanie Shannona jest prefiksowe - ćwiczenie Średnia długość kodu szacuje się przez: p i log 2 p i p i ( log 2 p i ) + 1 = h(x ) + 1 i i 11 / 35

Optymalność Kodowanie Shannona nie jest optymalne biorąc pod uwagę średnią długość kodu, ale jest bardzo dobre biorąc pod uwagę długość kodu każdego symbolu z osobna. Optymalność poszczególnych kodów Nich l(x) będzie długością kodu symbolu x w kodowaniu Shannona, a l (x) będzie długością kodu x w innym kodowaniu prefiksowym. Wtedy: P(l(X ) l (X ) + c) 1 2 c 1, dla c N 1, gdzie X to zmienna losowa oznaczająca symbol. Dla przykładu prawdopodobieństwo, że l (X ) jest co najmniej 5 bitów 1 krótsze niż l(x ) jest nie większe niż 2 = 1 5 1 16. 12 / 35

Dowód P(l(X ) l (X ) + c) = P( log p(x ) l (X ) + c) P( log p(x ) l (X ) + c 1) = P(p(X ) 2 l (X ) c+1 ) = x:p(x) 2 l (x) c+1 p(x) x:p(x) 2 l (x) c+1 2 l (x) (c 1) x 2 l (x) 2 (c 1) 2 (c 1). Ostatnia nierówność wynika z nierówności Krafta 13 / 35

Kodowanie Huffmana Optymalna technika kodowania prefiksowego dla zadanego rozkładu (mierzona średnią długością kodu) Obecnie podstawa wielu kompresorów np. bzip2, jpeg. Opiera się na konstrukcji drzewa (binarnego), w którym liście reprezentują symbole a ścieżka od korzenia do liści to ich kody 14 / 35

Algorytm Kody dwóch najrzadziej występujących symboli różnią się tylko na ostatniej pozycji. Algorytm rekurencyjny: Rozważ dwa najrzadziej występujące symbole rozróżniając je na końcu przez 0 i 1. Połącz oba w jeden symbol pomocniczy (kumulując ich prawdopodobieństwa) i rozważ teraz rekurencyjnie mniejszy alfabet Powtarzaj aż zostanie tylko jeden symbol 15 / 35

Przykład S = {a, b, c, d}, P = {0.45, 0.3, 0.2, 0.05} - zobaczyć 16 / 35

Własności optymalnych kodów Cechy kodowania optymalnego: jeśli p i > p j, to l i l j D: Gdyby nie zachodziło, to zamieniamy kod x i z kodem x j zmniejszając oczekiwaną długość dwa najdłuższe słowa kodowe mają równą długość D: W przeciwnym razie można by skrócić dłuższy z nich do długości krótszego (kod prefiksowe: żadne nie jest przedrostkiem innego) dla dowolnego najdłuższego słowa kodowego istnieje inne słowo o tej samej długości które różni się tylko na ostatnim bicie D: Inaczej, można by ściąć ostatni bit i ciągle mielibyśmy kod przedrostkowy Huffman spełnia te warunki (można pokazać, że to on jest takim optymalnym kodem, Cover, str 123) 17 / 35

Własności kodu Huffmana Kodowanie Huffmana nie jest jednoznaczne Nie mniej jednak, wartość oczekiwana kodu nie zależy od sposobu konstrukcji kodu Huffmana Można zastosować do innego alfabetu niż binarny: zamiast 2 symboli łączymy ze sobą n symboli Można kodować bloki symboli zamiast pojedynczych symboli Ćwiczenie: czy jest prawdą, że w kodowaniu Huffmana długość każdego symbolu jest nie większa niż log 2 p k? 18 / 35

Możliwie krótki kod Wiemy, że można zbudować kod na X, którego statystyczna długość L spełnia: h(x ) L < h(x ) + 1. Pytanie: czy można pokazać lepsze oszacowanie i zbliżyć się bardziej do entropii? Tak, ale trzeba budować kody na X k = X... X. Innymi słowy, zamiast kodować litery kodujemy słowa (albo dłuższe ciągi liter). 19 / 35

Entropia dwuwymiarowa Niech X = {x i }, Y = {y i } będą dyskretnymi przestrzeniami prob. z roskładami p = {p i }, q = {q i }, odpowiednio. Rozkład na X Y definiujemy jako p(x i, y j ) = p i q j, czyli zakładamy, że p i q są niezależne. Twierdzenie Mamy h(x Y ) = h(x ) + h(y ) Dowód: h(x Y ) = i p i q j log(p i q j ) j = i p i log p i j q j log q j = h(x ) + h(y ) 20 / 35

Entropia n-wymiarowa Rozumując przez indukcję można pokazać, że h(x 1... X k ) = h(x 1 ) +... + h(x k ) Bez założenia niezależności można pokazać nierówność. Czyli lepiej kodować dłuższe bloki od pojedynczych symboli 21 / 35

Kodowanie długich ciągów Shannon noiseless coding theorem Dla źródła bez pamięci można zbliżyć się dowolnie blisko entropii tzn. dla każdego n N istnieje kodowanie na X n takie, że średnia ilość bitów L 1 przypadających na element X spełnia: L 1 h(x ) + 1 n 22 / 35

Dowód Kodujemy słowa n-elementowe, czyli elementy X n Na podstawie poprzedniego twierdzenia entropia X n wynosi: h(x n ) = nh(x ). Zatem istnieje kodowanie na X n, którego długość L n spełnia: L n h(x n ) + 1 = nh(x ) + 1. Stąd, na jeden element z X będziemy potrzebowali (bo policzyliśmy ilość bitów na n-elementow ciąg). nh(x )+1 n Ostatecznie średnia długość kodu elementu z X spełnia: bitów L 1 h(x ) + 1 n. 23 / 35

Koszt kodowania a długość kodu Można byłoby sądzić, że warto kodować jak najdłuższe ciągi znaków, ale... Ilość możliwych n-elementowych ciągów ze zbioru m-elementowego wynosi m n, czyli słownik kodów rośnie m n 1 -razy Zatem zwiększamy znacząco pamięć potrzebną na pamiętanie słownika Ponadto, odkodowywanie jest wolne, bo trzeba przeszukiwać większy słownik Pomysł: można kodować wybrane długie ciągi np. te najczęściej występujące. 24 / 35

Kodowanie arytmetyczne Kodowanie Huffmana jest optymalne dla zapisu pojedynczych symboli, ale i tak traci się nawet do 1 bita w stosunku do entropii Jak widzieliśmy kodując większe fragmenty danych można zbliżyć się do entropii, kosztem złożoności pamięciowej i czasowej Kodowanie arytmetyczne koduje również bloki kodu (cały tekst) na raz, ale złożoność jest wyższa Idea polega na przypisaniu do tekstu liczby z przedziału [0, 1), która jednoznacznie identyfikuje tekst. 25 / 35

Idea Dla prawdopodobieństw symboli p 1,..., p m definiujemy prawdopodobieństwo skumulowane: P k = i<k p i. Czytając ciąg symboli będziemy tworzyć ciąg zstępujących podprzedziałów [0, 1). Jako kod przyjmiemy liczbę n stanowiącą długość tekstu oraz liczbę z (znacznik), czyli liczbę z utworzonego przedziału 26 / 35

Kodowanie Niech I 0 = [b 0, e 0 ) = [0, 1) oraz niech dany będzie tekst x Bierzemy pierwszą literę x k x która ma prawdopodobieństwo p k. Wtedy tworzymy: I 1 = [b 1, e 1 ) = b 0 + I 0 [P k, P k+1 ), gdzie I oznacza długość przedziału. Bierzemy następną literę x s, która wypada z prawdopodobieństwem p s. Tworzymy: I 2 = b 1 + I 1 [P l, P l+1 ). Po przeczytaniu m symboli otrzymamy przedział I n = [b n, e n ) [0, 1). 27 / 35

Własności Dla rożnych wiadomości tej samej długości otrzymujemy parami rozłączne przedziały. Natomiast jeśli jedna wiadomość jest prefiksem drugiej to odpowiednie przedziały zawierają się w sobie Zatem, ciąg jest jednoznacznie identyfikowany przez dowolną liczbę z I n (znacznik) oraz długość wiadomości n. Co więcej, długość przedziału kodującego jest równa prawdopodobieństwu odpowiadającego ciągu symboli. 28 / 35

Weźmy alfabet a, b, c z prawdopodobieństwami 0.7, 0.1, 0.2. Zakodujmy tekst abc. Na początku mamy przedział I 0 = [0, 1) oraz P 1 = 0, P 2 = 0.7, P 3 = 0.8, P 4 = 1. Bierzemy a i kodujemy za pomocą I 1 = [0, 0.7) Bierzemy b i kodujemy za pomocą I 2 = 0 + 0.7 [0.7, 0.8) = [0.49, 0.56) Bierzemy c i kodujemy za pomocą I 3 = 0.49 + 0.07 [0.8, 1) = [0.546, 0.56) Jako znacznik możemy przyjąć średnią I 3, tj. z = 0.553 oraz n = 3. 29 / 35

Dekodowanie Niech I 0 = [b 0, e 0 ) = [0, 1) oraz niech dany będzie znacznik z oraz długość n. Rozważamy przedziały postaci I i 1 = b 0 + I 0 [P i, P i+1 ) oraz wybieramy taki, który spełnia z I k 1. Odkodowujemy x k oraz definiujemy I 1 := I k 1 Ponownie rozważamy przedziały I i 2 = b 1 + I 1 [P i, P i+1 ) oraz wybieramy taki, który spełnia z I l 2. Odkodowujemy x l oraz definiujemy I 2 := I l 2 Kończymy gdy odkodowaliśmy n symboli. 30 / 35

Przykład Weźmy alfabet a, b, c z prawdopodobieństwami 0.7, 0.1, 0.2. Wtedy P 1 = 0, P 2 = 0.7, P 3 = 0.8, P 4 = 1. Niech z = 0.55, n = 3. Na początku I 0 = [b 0, e 0 ) = [0, 1) oraz rozważamy trzy przedziały 0 + 1 [P k, P k+1 ). Mamy z = 0.55 [0, 0.7) = 0 + 1 [0, 0.7). Zatem odkodowujemy a oraz kładziemy I 1 = [b 1, e 1 ) = [0, 0.7). Następnie z = 0.55 [0.49, 0.56) = 0 + 0.7 [0.7, 0.8). Zatem odkodowujemy b oraz kładziemy I 2 = [b 2, b 3 ) = [0.49, 0.56) Ostatecznie z = 0.55 [0.546, 0.56) = 0.49 + 0.07 [0.8, 1). Zatem odkodowujemy c. Jako że n = 3, to kończymy wypisując abc. 31 / 35

Reprezentacja znacznika Zakodowaliśmy n symboli i pytamy jak teraz zakodować znacznik z I n = [b n, e n )? Ponieważ długość I n wynosi e n b n, to istnieje w [b n, e n ) liczba, której ilość niezerowych cyfr po przecinku w rozwinięciu binarnym jest nie większa niż log 2 (e n b n ). Ćwiczenie: Proszę to sprawdzić. Zatem podajemy rozwinięcie binarne po przecinku dowolnego z I n długości log 2 (e n b n ) + 1, co gwarantuje jednoznaczność odkodowania n symboli. 32 / 35

Przykład Weźmy alfabet a, b, c z prawdopodobieństwami 0.7, 0.1, 0.2. Kod dla tekstu abc to np. 0.553 = (0.100011011) 2. Mamy, P(abc) = 0.014 Zatem bierzemy log 2 0.014 + 1 = 8 bitów po przecinku, czyli 10001101. 33 / 35

Długość kodu Pamiętamy, że kodując ciągi długości n za pomocą kodów Huffmana dostajemy oszacowanie na średnią długość kodu jednego symbolu: h(x ) L H h(x ) + 1 n Ćwiczenie: Średnia długość kodu symbolu Dla kodowania arytmetycznego średnia długość L A kodu jednego symbolu spełnia L A h(x ) + 2 n Wniosek: Dla kompresji długich ciągów kodowanie arytmetyczne może być efektywniejsze niż kodowanie Huffmana. 34 / 35

Inne kodowania Kodowanie Huffmana traci do 1 bita na entropię Kodowanie arytmetyczne jest wolne Są inne schematy kodowania, które starają się minimalizować powyższe wady np. kodowanie ułamkowe/asymetryczne) (Jarek Duda) 35 / 35