Wykład 4: kodowanie arytmetycznetju/KomprDz06/KomprDz06-Wyklad04.pdf · Podstawy i własnosci´...

34
Podstawy i wlasno´ sci Implementacja Kodowanie informacji Tomasz Jurdzi´ nski Wyklad 4: kodowanie arytmetyczne Jurdzi ´ nski Kodowanie arytmetyczne

Transcript of Wykład 4: kodowanie arytmetycznetju/KomprDz06/KomprDz06-Wyklad04.pdf · Podstawy i własnosci´...

Podstawy i własnosciImplementacja

Kodowanie informacji

Tomasz Jurdzinski

Wykład 4: kodowanie arytmetyczne

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Liczby rzeczywiste

Motywacja

Motywacje1 srednia długosc kodu Huffmana moze odbiegac o pmax +0.086

od entropii, gdzie pmax = maxi=1,...,n{pi} - moze to powodowacduze odchylenia od wartosci entropii

2 efekt ten mozna zniwelowac poprzez zastosowanie kodówHuffmana, w którym alfabet stanowia ciagi symboli okreslonejdługosci - ale wtedy rosnie gwałtownie rozmiar alfabetu.

Kodowanie arytmetyczne:

zastosowanie podejscia z punktu 2. bez koniecznosci tworzenia słówkodowych dla wszystkich ciagów symboli.Uogólnienie kodowania Shannona.

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Liczby rzeczywiste

Ogólnie

Pierwsze spojrzenie

tekst zostaje odwzorowany na liczbe z przedziału [0,1)nazywana ZNACZNIKiem.zakodowana postac tekstu tworzy ZNACZNIK, reprezentowany zodpowiednio dobrana dokładnoscia oraz n - długosckodowanego tekstu.

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Liczby rzeczywiste

Jedna litera

Znacznik dla jednej litery alfabetu:

elementy alfabetu numerujemy a1,a2, . . . ,an; oznaczmy ichprawdopodobienstwa przez p1,p2, . . . ,pn;literze ai przyporzadkowujemy dowolna liczbe z przedziału[F (i),F (i +1)), gdzie F (i) = ∑

i−1j=1 pi

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Liczby rzeczywiste

Znacznik dla ciagu

Kodowanie ciagu x1 . . .xn nad alfabetem a1, . . . ,am:1 z = [0,1); l = 0; p = 1;2 Dla i = 1,2, . . . ,n:

1 niech xi = aj2 l = l +F (j)(p− l)3 p = l +F (j +1)(p− l)

3 znacznik = (l +p)/2 (lub dowolna liczba z przedziału [l ,p))

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Liczby rzeczywiste

Przykład

P(a) = 0.7, P(b) = 0.1, P(c) = 0.2. Kodujemy tekst abc.

Tekst Lewy Prawy Znacznik0 1 0.5

a 0 0.7 0.35b 0.49 0.56 0.53c 0.546 0.560 0.553

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Liczby rzeczywiste

Jednoznacznosc

Lemat

Dla ustalonej długosci tekstu n, kazdy ciag jest odwzorowany naprzedział rozłaczny z przedziałami odpowiadajacymi innym ciagom.Gwarantuje to jednoznacznosc kodowania.

Dowód

Indukcja ze wzgledu na długosc kodowanego tekstu.

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Liczby rzeczywiste

Dekodowanie

Dekodowanie ciagu o długosci n ze znacznika z:1 l = 0; p = 1;2 Dla i = 1,2, . . . ,n:

1 wybierz j takie, ze l +F (j)(p− l)≤ z < l +F (j +1)(p− l)2 przyjmij, ze xi = aj3 l = l +F (j)(p− l);4 p = l +F (j +1)(p− l).

3 Ciag oryginalny to x1 . . .xn.

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Liczby rzeczywiste

Przykład

Niech z = 0.55 dla P(a) = 0.7, P(b) = 0.1, P(c) = 0.2 i n = 3.

Tekst Lewy Prawy Znacznik0 1

a 0 0.7b 0.49 0.56c 0.546 0.560

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Liczby rzeczywiste

Własnosci kodowania arytmetycznego

1 Wygenerowanie znacznika dla konkretnego ciagu nie wymagawyznaczania badz pamietania znaczników innych ciagów

2 Problem! Komputerowa reprezentacja znacznika moze wymagacduzej pamieci - jak dobrac wartosc znacznika abyzminimalizowac potrzebna pamiec?

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Liczby rzeczywiste

Długosc znacznika

Twierdzenie

Niech x = x1 . . .xn bedzie ciagiem danych o prawdopodobienstwiewystapienia P(x) = ∏

ni=1 P(xi). Zaokraglenie z ′ znacznika z dla ciagu

x do m(x) = dlog1/P(x)e+1 bitów (polegajace na usunieciudalszych bitów) gwarantuje jednoznacznosc kodowania.

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Liczby rzeczywiste

Dowód

Oznaczenia:z = (l +p)/2 - znacznik;z ′- zaokraglenie do m = m(x) bitów.

Wystarczy pokazac, zel ≤ z ′ < p

dla l i p wyznaczonych przy omawianiu algorytmu.Jest to równowazne warunkowi:

|z−z ′|< (p− l)/2.

Zauwazmy, ze z ′ ≤ z < p oraz 0 <= z−z ′ < 2m. Pozostaje lewykoniec przedziału...

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Liczby rzeczywiste

Dowód c.d.

Zauwazmy:z ′ ≤ z < p;p− l = P(x) (dla ciagów jednoliterowych z definicji, dla dłuzszychdowód indukcyjny)z(x)− l = P(x)/2,

z ′(x) > z(x)−1/2m(x) ≥ z(x)−1/2log(1/P(x))+1

> z(x)−1/(2∗1/P(x)) = z(x)−P(x)/2= (p + l)/2− (p− l)/2 = l .

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Liczby rzeczywiste

Jednoznacznosc kodowania z zaokragleniem

Ostatecznie, jednoznacznosc wynika z:rozłacznosci przedziałów.faktu, ze z ′ nalezy do przedziału odpowiadajacego danemutekstowi.

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Liczby rzeczywiste

Kod prefiksowy

Twierdzenie

Kod arytmetyczny jest (dla ustalonej długosci kodowanego tekstu)przy zaokraglaniu do dlog1/P(x)e+1 bitów jest kodem prefiksowym.

DowódWynika z nastepujacych faktów:

przyblizenie z ′ znacznika z do dlog1/P(x)e+1 bitów znajdujesie w przedziale przypisanym ciagowi x ,przedziały róznych ciagów sa rozłaczne.kazde słowo (liczba) o prefiksie z ′ tez miesci sie w przedzialeprzypisanym ciagowi x .

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Liczby rzeczywiste

Przykład

Znacznik dla P(a)=0.7, P(b)=0.1, P(c)=0.2 i tekstu abc to 0.553,binarnie 0.100011011. Liczba “potrzebnych” bitów tod(log1/0.014)e+1 = 8. Czyli zakodowana postac tekstu to 10001101.

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Liczby rzeczywiste

Kod arytmetyczny a entropia

Kod a entropia

Srednia liczba bitów na jeden symbol kodu arytmetycznego (zzaokragleniem) dla ciagów o długosci n jest ≤ H(P)+2/n, gdzie P torozkład prawdopodobienstwa dla alfabetu wejsciowego.

Dowód

∑{x | |x |=n}P(x)m(x) = ∑{x | |x |=n}P(x)(dlog1/P(x)e+1)≤ ∑{x | |x |=n}P(x)(log(1/P(x))+1+1)= −∑{x | |x |=n}P(x) logP(x)+2∑{x | |x |=n}P(x)= H(Pn)+2

A zatem, liczba bitów na symbol jest nie wieksza niz

H(P)+2/n.

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Problemy z implementacja

wraz ze wzrostem długosci ciagu potrzebna coraz wiekszaprecyzja reprezentacji liczb; a czas operacji arytmetycznych jestproporcjonalny do długosci liczb...dla efektywnosci transmisji danych - potrzebny przyrostowyalgorytm kodowania (znacznik powstaje wraz z wydłuzaniem sieciagu, nie dopiero po przeczytaniu całego ciagu).

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Przeskalowanie

E1(x) = 2x :[l ,p)⊆ [0,0.5)⇒ l = 0.0l ′,p = 0.0p′ ⇒ 2 ·p = 0.p′,2 ·p = 0.p′

E2(x) = 2(x −0.5):[l ,p)⊆ [0.5,1)⇒ l = 0.1l ′,p = 0.1p′ ⇒ 2(l −1/2) =0.l ′,2(p−1/2) = 0.p′

E3(x) = 2(x −0.25):l ∈ [0.25,0.5), p ∈ [0.5,0.75) ⇒ l = 0.01l ′, p = 0.10p′

⇒ 2(l −1/4) = 0.0l ′, 2(p−1/4) = 0.1p′

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Kodowanie z przeskalowaniem

Na poczatku: licznik := 0, l = 0, p = 1, kod jest słowem pustym.Po zakodowaniu kazdej litery:Dopóki [l ,p)⊆ [0,0.5) lub [l ,p)⊆ [0.5,1) lub [l ,p)⊆ [0.25,0.75):

1 Jesli [l ,p)⊆ [0,0.5):1 zamien [l ,p) na [E1(l),E1(p)), gdzie E1(x) = 2x .2 dołacz do kodu słowo 01licznik

3 licznik := 02 Jesli [l ,p)⊆ [0.5,1):

1 zamien [l ,p) na [E2(l),E2(p)), gdzie E2(x) = 2(x −0.5).2 dołacz do kodu słowo 10licznik

3 licznik := 03 l < 0.5 < p oraz [l ,p)⊆ [0.25,0.75):

1 zamien [l ,p) na [E3(l),E3(p)), gdzie E3(x) = 2(x −0.25)2 licznik := licznik +1;

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Przeskalowanie: poprawnosc

Lemat1 (E1) 2 ·num(0.0x) = num(0.x)

2 (E2) num(0.1x)−1/2 = num(0.0x);3 (E3) Ciag przeskalowan E1E i

2 jest równowazny E i3E1.

4 (E3) ciag przeskalowan E2E i1 jest równowazny E i

3E2

gdzie num(y) oznacza wartosc liczby zapisanej binarnie jako słowo y .

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Dekodowanie z przeskalowaniem

Wejscie: znacznik, czyli ciag binarny bedacy zakodowana postaciatekstu; n – długosc tekstu.Inicjalizacja:

1 Niech m = maxai dlog(1/P(ai))e+3. Odczytujemy pierwsze mbitów znacznika i ustalamy pierwsze przyblizenie znacznika z ′ ipierwszy symbol w tekscie, aj .

2 l := F (j); p := F (j +1);3 licznik := 0;

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Dekodowanie z przeskalowaniem

Kontynuacja (powtarzaj az do odkodowania n liter):1 jesli [l ,p) spełnia warunki dla przeskalowania E1 lub E2:

1 przeskaluj [l ,p) przy pomocy E1 lub E2,2 usun 1+ licznik najbardziej znaczacych bitów z ′ i dołacz kolejne

1+ licznik bitów jako najmniej znaczace bity z ′3 licznik := 0

2 jesli [l ,p) spełnia warunek dla E3: przeskalowanie E3 dla [l ,p) i z ′

i zwiekszenie licznik o 1;3 jesli przedział nie spełnia zadnego z warunków dla E1, E2, E3:

odczytujemy kolejne bity z ′ tak aby było ich co najmniej m; napodstawie z ′ wyznaczamy kolejna litere tekstu i kolejny przedział.

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Co daje skalowanie

wielkosc przedziału (p− l) pozostaje nie mniejsza niz pmin/4,gdzie pmin to najmniejsze prawdopodobienstwo pojedynczegosymbolu;Uwaga: mały przedział wymaga duzej dokładnosci (aby wartoscil i p nie zrównały sie).kodowanie progresywne: kod powstaje w trakcie kodowania, niedopiero na koncu;dekodowanie: operacje na znaczniku długosci ≈ log(1/pmin), niena „pełnym” znaczniku;dekodowanie bardziej skomplikowane

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Implementacja całkowitoliczbowa

ProblemArytmetyka zmiennoprzecinkowa:

generuje błedy zaokraglen, wieckonieczna dokładna implementacja (komplikacje...);

Cel

przeskalowac przedział [0,1) na zbiór naturalnych liczb m-bitowych,czyli [0,2m −1], binarnie [0m,1m].

Pytanie

jak dobrac parametr m aby zachowac jednoznacznosc kodowania(nie mozemy uzyskac przedziału o wielkosci 0).

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Implementacja całkowitoliczbowa c.d.

Załozenia

prawdopodobienstwa wyliczone na podstawie czestosciwystepowania...niech ci to liczba wystapien symbolu ai , C = ∑

ni=1 ci

wówczas pi = ci/Cniech fi = ∑

i−1j=1 ci

Dobór parametru m

dla jednego symbolu: 2m > C (najmniejszy przedział to 1/C)dla k symboli: 2m > Ck ... :(ale przeskalowanie gwarantuje, ze po kazdym kroku mamyprzedział nie mniejszy niz pmin/4 (czyli 1/4C)zatem wystarczy, ze: 2m > 4C.

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Implementacja całkowitoliczbowa c.d.

Algorytm: jak zaokraglamy

Kodowanie ciagu x1 . . .xn nad alfabetem a1, . . . ,ar :1 l = 0; p = 2m −1;2 Dla i = 1,2, . . . ,n:

1 niech xi = aj

2 l = l +⌊

(p−l+1)·f (j)C

⌋3 p = l +

⌊(p−l+1)·f (j+1)

C

⌋−1

3 znacznik: dowolna liczba całkowita z przedziału [l ,p]

Uwaga

Musimy tez stosowac przeskalowania (w przeciwnym razie potrzebnebardzo duze m i rosnie czas obliczen).

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Implementacja całkowitoliczbowa c.d.

Jak zaokraglamy

dlaczego −1: poniewaz [l ,p) reprezentujemy jako [l ,p−1];dlaczego (p− l+1) a nie (p− l): z powyzszego powodu;dlaczego f (j)/C i f (j +1)/C: poniewaz odpowiadajaskumulowanym prawdopodobienstwom F (j) i F (j +1).

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Kodowanie adaptacyjne

Idea

W kazdym kroku uzywamy czestosci (a tym samymprawdopodobienstw) wyliczonych z juz odkodowanej czesci tekstu.

Modyfikacja algorytmu

(de)Kodujac k -ty symbol, dzielimy aktualny przedział zgodnie zczestosciami dla pierwszych (k −1) symboli.

Problem zerowego prawdopodobienstwa

Jak kodowac symbol pojawiajacy sie po raz pierwszy:przydzielic czestosci 1: niepraktyczne przy duzym alfabecie;zarezerwowac symbol specjalny o czestosci (np.) 1, którypoprzedza pierwsze pojawienie sie symbolu; po zakodowaniutego symbolu kodujemy nowy symbol wg rozkładu jednostajnego.

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Kodowanie z uwzglednieniem kontekstu

Załozenie

Tekst nie jest ciagiem wartosci niezaleznych. Zaleznosci dotyczasasiednich liter.

Idea

Dla kazdego symbolu ai , badamy prawdopodobienstwo pojawieniasie symboli a1, . . . ,an bezposrednio za ai .

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Kontekst c.d.

Przykład

a b ca .4 .2 .4b .1 .8 .1c .25 .25 .5

Modyfikacja algorytmu

(de)kodujac k -ty symbol, dzielimy aktualny przedział zgodnie zczestosciami dla wystapien symboli za symbolem (k −1)szym.

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Kontekst i adaptacja a implementacje

Adaptacja i kontekst a implementacja

dodatkowe struktury danych i ich modyfikacje: niekonieczne!algorytm z przeskalowaniem: wystarczy znac najmniejszeprawdopodobienstwo;implementacja całkowitoliczbowa: wystarczy znac długosckodowanego tekstu.

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Kodowanie arytmetyczne a kodowanie Huffmana

Co lepsze?

gdy grupujemy m symboli:Huffman koduje ze srednia H(P)+1/m, kodowanie arytmetyczneH(P)+2/male grupowanie dla duzych m w Huffmanie nierealistyczne

kod arytmetyczny bardziej elastyczny:wersja adaptacyjna: duzo łatwiej przy kodowaniu arytmetycznym;uwzglednienie kontekstu: kodowanie arytmetyczne ma mniejszewymagania pamieciowe.

Jurdzinski Kodowanie arytmetyczne

Podstawy i własnosciImplementacja

Kodowanie arytmetyczne: zastosowania

bezstratna kompresja obrazów (JBIG): wariant predykcyjny;progresywna transmisja obrazów;algorytm PPM (kodowanie arytmetyczne z kontekstem): jedna znajlepszych metod kompresji tekstów w jezyku naturalnym.problem: patenty!

Jurdzinski Kodowanie arytmetyczne