• Nie Znaleziono Wyników

MarekŚmieja Kody

N/A
N/A
Protected

Academic year: 2021

Share "MarekŚmieja Kody"

Copied!
35
0
0

Pełen tekst

(1)

Kody

Marek Śmieja

Teoria informacji

(2)

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 ) = X

i

p i (− log 2 p i ).

Będziemy pisać zamiennie h(zbiór) = h(rozkład pr.) = h(zmienna los)

(3)

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.

(4)

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

(5)

Górne oszacowanie

Weźmy kodowanie o długościach l i = d− log n p i e. Z tw. Krafta można zbudować kod realizujący te długości. Wtedy:

h(p 1 , . . . , p n ) = X

i

p i (− log 2 p i ) ¬ X

i

p i l i

¬ X

i

p i (− log 2 p i + 1) = X

i

p i (− log 2 p i ) + X

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

(6)

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

(7)

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ć

(8)

Kodowanie Shannona

Kodowanie, w którym długość kodu każdego symbolu x k wynosi l k = d− log 2 p k e.

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

(9)

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 = d− log 2 p i e

Aby poznać jawny wzór na kod definiujemy prawd. kumulatywne:

P k = X

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)

(10)

Przykład

S = {a, b, c, d }, P = {0.45, 0.3, 0.2, 0.05}

l a = d− log 0.45e = 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) = ...

(11)

Własności

Kodowanie Shannona jest prefiksowe - ćwiczenie Średnia długość kodu szacuje się przez:

X

i

p i d− log 2 p i e ¬ X

i

p i (− log 2 p i ) + 1 = h(X ) + 1

(12)

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 0 (x ) będzie długością kodu x w innym kodowaniu prefiksowym. Wtedy:

P(l (X ) ­ l 0 (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 0 (X ) jest co najmniej 5 bitów

krótsze niż l (X ) jest nie większe niż 2

5−1

1 = 16 1 .

(13)

Dowód

P(l (X ) ­ l 0 (X ) + c) = P(d− log p(X )e ­ l 0 (X ) + c)

¬ P(− log p(X ) ­ l 0 (X ) + c − 1)

= P(p(X ) ¬ 2 −l

0

(X )−c+1 )

= P

x :p(x )¬2

−l0 (x)−c+1

p(x )

¬ P

x :p(x )¬2

−l0 (x)−c+1

2 −l

0

(x )−(c−1)

¬ P

x 2 −l

0

(x ) 2 −(c−1)

¬ 2 −(c−1) .

Ostatnia nierówność wynika z nierówności Krafta

(14)

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

(15)

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

(16)

Przykład

S = {a, b, c, d }, P = {0.45, 0.3, 0.2, 0.05} - zobaczyć

(17)

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)

(18)

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ż d−log 2 p k e?

(19)

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).

(20)

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 ) = − X

i

X

j

p i q j log(p i q j )

= − X

p log p X

q log q = h(X ) + h(Y )

(21)

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

(22)

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

(23)

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 nh(X )+1 n bitów (bo policzyliśmy ilość bitów na n-elementow ciąg).

Ostatecznie średnia długość kodu elementu z X spełnia:

L 1 ¬ h(X ) + 1

n .

(24)

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.

(25)

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.

(26)

Idea

Dla prawdopodobieństw symboli p 1 , . . . , p m definiujemy prawdopodobieństwo skumulowane:

P k = X

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

(27)

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).

(28)

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.

(29)

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.

(30)

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 1 i = b 0 + |I 0 | · [P i , P i +1 ) oraz wybieramy taki, który spełnia z ∈ I 1 k . Odkodowujemy x k oraz definiujemy I 1 := I 1 k Ponownie rozważamy przedziały

I 2 i = b 1 + |I 1 | · [P i , P i +1 )

oraz wybieramy taki, który spełnia z ∈ I 2 l .

Odkodowujemy x l oraz definiujemy I 2 := I 2 l

Kończymy gdy odkodowaliśmy n symboli.

(31)

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.

(32)

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ż

d− log 2 (e n − b n )e.

Ćwiczenie: Proszę to sprawdzić.

Zatem podajemy rozwinięcie binarne po przecinku dowolnego z ∈ I n

długości d− log 2 (e n − b n )e + 1, co gwarantuje jednoznaczność

odkodowania n symboli.

(33)

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 d− log 2 0.014e + 1 = 8 bitów po przecinku, czyli

10001101.

(34)

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.

(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)

Cytaty

Powiązane dokumenty

Pojawi³y siê równie¿ projekty buduj¹ce symbolikê Parku Tysi¹cle- cia na wyraziœcie opracowanym wczeœniej modelu graficznym.. W pracy nr 05 (trzecia nagro- da) autorzy

Rozważmy graf G(V, E, γ) w którym V jest zbiorem pól rozważanej szachownicy, oraz dwa wierzchołki są sąsiadami wtedy i tylko wtedy gdy skoczek szachowy może się między

Drzewo mające własność rodzeństwa jest drzewem Huffmana (tw. Fallera- Gallagera)..  Budowane drzewo zawiera liść (0- węzeł ) reprezentujący wszystkie symbole, które

Krawędzi, które łączą wierzchołki należące do różnych kawałków, jest dokładnie n k − 1, a ponieważ poddrzewa połączone takimi krawędziami składają się z

Z dowodu wynika również, że liczb n, o których mowa w twierdzeniu, istnieje nieskończenie wiele.. Na zakończenie

Jeśli jednak nie jest prawdą, że logika jest jedna, to może istnieć logika prawnicza jako odmienny rodzaj logiki.. Zatem albo logika jest jedna, albo nie jest prawdą, że nie

Pokazac, że wartości własne ograniczonego operatora samosprzężonego są rzeczy- wiste.. Pokazać, że wartości własne operatora unitarnego leżą na

Wypisać wszystkie elementy ciała Z 3 (α) oraz obliczyć sumy i iloczyny wybranych elementów tego ciała.. (16) Zbudować ciało 4-elementowe oraz ciało 9-elementowe jako