• Nie Znaleziono Wyników

Kodowanie informacji

N/A
N/A
Protected

Academic year: 2022

Share "Kodowanie informacji"

Copied!
25
0
0

Pełen tekst

(1)

Kodowanie informacji

Tomasz Jurdzi ´nski

Wykład 3: kodowanie arytmetyczne

Jurdzi ´nski Kodowanie arytmetyczne

(2)

Motywacja

Motywacje

1 ´srednia długo´s´c kodu Huffmana mo˙ze odbiega´c o pmax+0.086 od entropii, gdzie pmax=maxi=1,...,n{pi} - mo˙ze to powodowa´c du˙ze odchylenia od warto´sci entropii

2 efekt ten mo˙zna zniwelowa´c poprzez zastosowanie kodów Huffmana, w którym alfabet stanowi ˛a ci ˛agi symboli okre´slonej długo´sci - ale wtedy ro´snie gwałtownie rozmiar alfabetu.

Kodowanie arytmetyczne:

zastosowanie podej´scia z punktu 2. bez konieczno´sci tworzenia słów

(3)

Ogólnie

Pierwsze spojrzenie

tekst zostaje odwzorowany na liczb ˛e z przedziału [0, 1) nazywan ˛a ZNACZNIKiem.

zakodowan ˛a posta´c tekstu tworzy ZNACZNIK, reprezentowany z odpowiednio dobran ˛a dokładno´sci ˛a oraz n - długo´s´c

kodowanego tekstu.

Jurdzi ´nski Kodowanie arytmetyczne

(4)

Jedna litera

Znacznik dla jednej litery alfabetu:

elementy alfabetu numerujemy a1,a2, . . . ,an; oznaczmy ich prawdopodobie ´nstwa przez p1,p2, . . . ,pn;

literze ai przyporz ˛adkowujemy dowoln ˛a liczb ˛e z przedziału [F (i), F (i + 1)), gdzie F (i) = ∑i−1j=1pi

(5)

Znacznik dla ci ˛ agu

Kodowanie ci ˛agu x1. . .xn nad alfabetem a1, . . . ,am:

1 z = [0, 1); l = 0; p = 1;

2 Dla i = 1, 2, . . . , n:

1 niech xi=aj

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

Jurdzi ´nski Kodowanie arytmetyczne

(6)

Przykład

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

Tekst Lewy Prawy Znacznik

0 1 0.5

a 0 0.7 0.35

b 0.49 0.56 0.53

c 0.546 0.560 0.553

(7)

Jednoznaczno´s´c

Lemat

Dla ustalonej długo´sci tekstu n, ka˙zdy ci ˛ag jest odwzorowany na przedział rozł ˛aczny z przedziałami odpowiadaj ˛acymi innym ci ˛agom.

Gwarantuje to jednoznaczno´s´c (de)kodowania.

Dowód

Indukcja ze wzgl ˛edu na długo´s´c kodowanego tekstu.

Jurdzi ´nski Kodowanie arytmetyczne

(8)

Dekodowanie

Dekodowanie ci ˛agu o długo´sci 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=aj

3 l = l + F (j)(p − l);

4 p = l + F (j + 1)(p − l).

3 Ci ˛ag oryginalny to x1. . .xn.

(9)

Przykład

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

Tekst l p p − l

0 1 1

a 0 0.7 0.7

b 0.49 0.56 0.07

c 0.546 0.560 0.014

Jurdzi ´nski Kodowanie arytmetyczne

(10)

Własno´sci kodowania arytmetycznego

1 Wygenerowanie znacznika dla konkretnego ci ˛agu nie wymaga wyznaczania b ˛ad´z pami ˛etania znaczników innych ci ˛agów

2 Problem! Komputerowa reprezentacja znacznika mo˙ze wymaga´c du˙zej pami ˛eci - jak dobra´c warto´s´c znacznika aby

zminimalizowa´c potrzebn ˛a pami ˛e´c?

(11)

Długo´s´c znacznika

Twierdzenie

Niech x = x1. . .xnb ˛edzie ci ˛agiem danych o prawdopodobie ´nstwie wyst ˛apienia P(x ) = ∏ni=1P(xi). Zaokr ˛aglenie z0znacznika z dla ci ˛agu x do m(x ) = dlog 1/P(x )e + 1 bitów (polegaj ˛ace na usuni ˛eciu

dalszych bitów) gwarantuje jednoznaczno´s´c kodowania.

Jurdzi ´nski Kodowanie arytmetyczne

(12)

Dowód

Oznaczenia:

z = (l + p)/2 - znacznik;

z0- zaokr ˛aglenie do m = m(x ) bitów.

Wystarczy pokaza´c, ˙ze

l ≤ z0<p dla l i p wyznaczonych przez algorytm.

Jest to równowa˙zne warunkowi:

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

Zauwa˙zmy, ˙ze z0≤ z < p oraz 0 <= z − z0<2m. Pozostaje lewy

(13)

Dowód c.d.

Zauwa˙zmy:

z0≤ z < p;

p − l = P(x ) (dla ci ˛agów jednoliterowych z definicji, dla dłu˙zszych dowód indukcyjny)

z(x ) − l = P(x )/2,

z0(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.

Jurdzi ´nski Kodowanie arytmetyczne

(14)

Jednoznaczno´s´c kodowania z zaokr ˛ agleniem

Ostatecznie, jednoznaczno´s´c wynika z:

rozł ˛aczno´sci przedziałów.

faktu, ˙ze z0nale˙zy do przedziału odpowiadaj ˛acego danemu tekstowi.

(15)

Kod prefiksowy

Twierdzenie

Kod arytmetyczny jest (dla ustalonej długo´sci kodowanego tekstu) przy zaokr ˛aglaniu do dlog 1/P(x )e + 1 bitów jest kodem prefiksowym.

Dowód

Wynika z nast ˛epuj ˛acych faktów:

przybli˙zenie z0znacznika z do dlog 1/P(x )e + 1 bitów znajduje si ˛e w przedziale przypisanym ci ˛agowi x ,

przedziały ró˙znych ci ˛agów s ˛a rozł ˛aczne.

ka˙zde słowo (liczba) o prefiksie z0te˙z mie´sci si ˛e w przedziale przypisanym ci ˛agowi x .

Jurdzi ´nski Kodowanie arytmetyczne

(16)

Przykład

Znacznik dla P(a)=0.7, P(b)=0.1, P(c)=0.2 i tekstuabc to 0.553, binarnie 0.100011011. Liczba “potrzebnych” bitów to

d(log 1/0.014)e + 1 = 8. Czyli zakodowana posta´c tekstu to10001101.

(17)

Kod arytmetyczny a entropia

Kod a entropia

Srednia liczba bitów na jeden symbol kodu arytmetycznego (z´ zaokr ˛agleniem) dla ci ˛agów o długo´sci n jest ≤ H(P) + 2/n, gdzie P to rozkład prawdopodobie ´nstwa dla alfabetu wej´sciowego.

Dowód

{x | |x|=n}P(x )m(x ) = ∑{x | |x|=n}P(x )(dlog 1/P(x )e + 1)

≤ ∑{x | |x|=n}P(x )(log(1/P(x )) + 1 + 1)

= − ∑{x | |x|=n}P(x ) log P(x ) + 2 ∑{x | |x|=n}P(x )

= H(Pn) +2

A zatem, liczba bitów na symbol jest nie wi ˛eksza ni˙z H(P) + 2/n.

Jurdzi ´nski Kodowanie arytmetyczne

(18)

Problemy z implementacj ˛ a

wraz ze wzrostem długo´sci ci ˛agu potrzebna coraz wi ˛eksza precyzja reprezentacji liczb; a czas operacji arytmetycznych jest proporcjonalny do długo´sci liczb...

dla efektywno´sci transmisji danych - potrzebny przyrostowy algorytm kodowania (znacznik powstaje wraz z wydłu˙zaniem si ˛e ci ˛agu, nie dopiero po przeczytaniu całego ci ˛agu).

(19)

Przeskalowanie

[l, p) ⊆ [0, 0.5) ⇒ l = 0.0l0,p = 0.0p0⇒ 2 · p = 0.p0,2 · l = 0.l0 [l, p) ⊆ [0.5, 1) ⇒ l = 0.1l0,p = 0.1p0

2(l − 1/2) = 0.l0,2(p − 1/2) = 0.p0 l ∈ [0.25, 0.5), p ∈ [0.5, 0.75) ⇒ l = 0.01l0,p = 0.10p0

2(l − 1/4) = 0.0l0,2(p − 1/4) = 0.1p0

Jurdzi ´nski Kodowanie arytmetyczne

(20)

Kodowanie z przeskalowaniem

Na pocz ˛atku: licznik := 0, l = 0, p = 1, kod jest słowem pustym.

Po zakodowaniu ka˙zdej litery:

Dopóki [l, p) ⊆ [0, 0.5) lub [l, p) ⊆ [0.5, 1) lub [l, p) ⊆ [0.25, 0.75):

1 Je´sli [l, p) ⊆ [0, 0.5):

1 zamie ´n [l, p) na [E1(l), E1(p)), gdzie E1(x ) = 2x .

2 doł ˛acz do kodu słowo 01licznik

3 licznik := 0

2 Je´sli [l, p) ⊆ [0.5, 1):

1 zamie ´n [l, p) na [E2(l), E2(p)), gdzie E2(x ) = 2(x − 0.5).

2 doł ˛acz do kodu słowo 10licznik

3 licznik := 0

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

(21)

Przeskalowanie: poprawno´s´c

Lemat

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

2 (E2) num(0.1x ) − 1/2 = num(0.0x );

3 (E3) Ci ˛ag przeskalowa ´n E1E2i jest równowa˙zny E3iE1.

4 (E3) ci ˛ag przeskalowa ´n E2E1i jest równowa˙zny E3iE2

gdzie num(y ) oznacza warto´s´c liczby zapisanej binarnie jako słowo y .

Jurdzi ´nski Kodowanie arytmetyczne

(22)

Dekodowanie z przeskalowaniem

Wej´scie: znacznik, czyli ci ˛ag binarny b ˛ed ˛acy zakodowan ˛a postaci ˛a tekstu.

Inicjalizacja:

1 Niech m = maxaidlog(1/P(ai))e. Odczytujemy pierwsze m bitów znacznika i ustalamy pierwsze przybli˙zenie znacznika z0i pierwszy symbol w tek´scie, aj.

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

3 licznik := 0;

(23)

Dekodowanie z przeskalowaniem

Kontynuacja (powtarzaj a˙z do odczytania wszystkich bitów):

1 je´sli [l, p) spełnia warunki dla przeskalowania E1lub E2:

1 przeskaluj [l, p) przy pomocy E1lub E2,

2 usu ´n 1 + licznik najbardziej znacz ˛acych bitów z0i doł ˛acz kolejne 1 + licznik bitów jako najmniej znacz ˛ace bity z0

3 licznik := 0

2 je´sli [l, p) spełnia warunek dla E3: przeskalowanie E3dla [l, p) i z0 i zwi ˛ekszenie licznik o 1;

3 je´sli przedział nie spełnia ˙zadnego z warunków dla E1, E2, E3: odczytujemy kolejne bity z0tak aby było ich co najmniej m; na podstawie z0wyznaczamy kolejn ˛a liter ˛e tekstu i kolejny przedział.

Jurdzi ´nski Kodowanie arytmetyczne

(24)

Co daje skalowanie

wielko´s´c przedziału (p − l) pozostaje nie mniejsza ni˙z min(− log pmin,1/4), gdzie pminto najmniejsze prawdopodobie ´nstwo pojedynczego symbolu;

Uwaga: mały przedział wymaga du˙zej dokładno´sci (aby warto´sci l i p nie zrównały si ˛e).

kodowanieprogresywne: kod powstaje w trakcie kodowania, nie dopiero na ko ´ncu;

dekodowanie: operacje na znaczniku długo´sci log(1/pmin), nie na „pełnym” znaczniku;

dekodowanie bardziej skomplikowane

(25)

Kodowanie arytmetyczne a kodowanie Huffmana

Co lepsze?

gdy grupujemy m symboli:

Huffman koduje ze ´sredni ˛a H(P) + 1/m, kodowanie arytmetyczne H(P) + 2/m

ale grupowanie dla du˙zych m w Huffmanie nierealistyczne wersja adaptacyjna: du˙zo łatwiej przy kodowaniu

arytmetycznym;

uwzgl ˛ednienie kontekstu: kodowanie arytmetyczne ma mniejsze wymagania pami ˛eciowe.

Jurdzi ´nski Kodowanie arytmetyczne

Cytaty

Powiązane dokumenty

Nr zad. porównanie czasów dojazdu samochodów do skrzy owania - czas dojazdu samochodu policyjnego 13,35s , a gangsterów 8s).. Jakakolwiek droga prowadz ca do powy szego wniosku

IKS - Inwestycja w Kierunki Strategiczne na Wydziale Matematyki i Informatyki UMK  realizowany w ramach Poddziaªania 4.1.2 Programu Operacyjnego Kapitaª Ludzki. Kurs wyrównawczy

Cena dia- mentów zale»y od bardzo wielu zmiennych (kilka z nich jest wypisana w pliku), ale podsta- wow¡ jest waga w karatach.. Jednak ta zale»no±¢ nie

Czy nast¸ epuj¸ aca funkcja jest ci¸ ag la

Owoce stanowi bogate ródło wielu substancji o wła ciwo ciach przeciwutleniaj cych, a zwłaszcza polifenoli, stanowi cych jedn z głównych grup zwi zków wtórnego

Niech X, Y b¸ed¸a jednowymiarowymi

Podana jest liczba kilometr´ow, kt´ore mo˙zna przejecha´c na pe lnym baku oraz odleg lo´sci mi¸edzy stacjami.. W lasna propozycja tematu projektu (po

W przypadku x &gt; 0 jest rosn¸ acy, to może si¸e zdarzyć, że pocz¸ atkowe wyrazy zmieniaj¸ a znak , a wi¸ec o monotoniczności nie może być mowy.Jeżeli wszystkie wyrazy ci¸