You are on page 1of 93

Kody Tunstalla.

Kodowanie arytmetyczne
Kodowanie i kompresja informacji - Wykad 3 Filip Zagrski

8 marca 2010

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kody Tunstalla

ale Wszystkie sowa kodowe maja ta sama dugo sc jeden kod mo ze kodowa c r zna liczbe liter alfabetu wej sciowego.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kody Tunstalla

ale Wszystkie sowa kodowe maja ta sama dugo sc jeden kod mo ze kodowa c r zna liczbe liter alfabetu wej sciowego. rednia Chcemy zmaksymalizowa cs liczbe symboli z pierwotnego alfabetu reprezentowanych przez sowa kodowe.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kody Tunstalla

ale Wszystkie sowa kodowe maja ta sama dugo sc jeden kod mo ze kodowa c r zna liczbe liter alfabetu wej sciowego. rednia Chcemy zmaksymalizowa cs liczbe symboli z pierwotnego alfabetu reprezentowanych przez sowa kodowe. Alfabet wej sciowy: litery a1 , a2 , . . . , aN z prawdopodobienstwami p1 , p2 , . . . , pN (N symboli).

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kody Tunstalla

ale Wszystkie sowa kodowe maja ta sama dugo sc jeden kod mo ze kodowa c r zna liczbe liter alfabetu wej sciowego. rednia Chcemy zmaksymalizowa cs liczbe symboli z pierwotnego alfabetu reprezentowanych przez sowa kodowe. Alfabet wej sciowy: litery a1 , a2 , . . . , aN z prawdopodobienstwami p1 , p2 , . . . , pN (N symboli). Kody sa dugo sci n bitw.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Algorytm tworzenia kodw Tunstalla


Przyporzadkowujemy symbolom alfabetu N r znych sw kodowych (o dugo sci n).

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Algorytm tworzenia kodw Tunstalla


Przyporzadkowujemy symbolom alfabetu N r znych sw kodowych (o dugo sci n). Dopki liczba niewykorzystanych sw kodowych jest wieksza ni z N 1:

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Algorytm tworzenia kodw Tunstalla


Przyporzadkowujemy symbolom alfabetu N r znych sw kodowych (o dugo sci n). Dopki liczba niewykorzystanych sw kodowych jest wieksza ni z N 1:
wybierz sowo kodowe e odpowiadajace ciagowi o najwiekszym prawdopodobienstwie;

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Algorytm tworzenia kodw Tunstalla


Przyporzadkowujemy symbolom alfabetu N r znych sw kodowych (o dugo sci n). Dopki liczba niewykorzystanych sw kodowych jest wieksza ni z N 1:
wybierz sowo kodowe e odpowiadajace ciagowi o najwiekszym prawdopodobienstwie; e z kodu; usun

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Algorytm tworzenia kodw Tunstalla


Przyporzadkowujemy symbolom alfabetu N r znych sw kodowych (o dugo sci n). Dopki liczba niewykorzystanych sw kodowych jest wieksza ni z N 1:
wybierz sowo kodowe e odpowiadajace ciagowi o najwiekszym prawdopodobienstwie; e z kodu; usun dodaj do kodu ciagi powstae z dodania a1 , . . . , an jako suksw ciagu odpowiadajacego kodowi e (przypisz im odpowiednie prawdopodobienstwa).

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Algorytm tworzenia kodw Tunstalla


Przyporzadkowujemy symbolom alfabetu N r znych sw kodowych (o dugo sci n). Dopki liczba niewykorzystanych sw kodowych jest wieksza ni z N 1:
wybierz sowo kodowe e odpowiadajace ciagowi o najwiekszym prawdopodobienstwie; e z kodu; usun dodaj do kodu ciagi powstae z dodania a1 , . . . , an jako suksw ciagu odpowiadajacego kodowi e (przypisz im odpowiednie prawdopodobienstwa).

Co najmniej jedno sowo kodowe zostanie niewykorzystane

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad
We zmy alfabet a, b, c (N = 3) z prawdopodobienstwami P (a) = 0.6, P (b) = 0.3 i P (c ) = 0.1.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad
We zmy alfabet a, b, c (N = 3) z prawdopodobienstwami P (a) = 0.6, P (b) = 0.3 i P (c ) = 0.1. Ustalmy n = 3 (8 sw kodowych).

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad
We zmy alfabet a, b, c (N = 3) z prawdopodobienstwami P (a) = 0.6, P (b) = 0.3 i P (c ) = 0.1. Ustalmy n = 3 (8 sw kodowych). Mamy 3 sowa kodowe odpowiadajace a 0.6, b 0.3 i c 0.1.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad
We zmy alfabet a, b, c (N = 3) z prawdopodobienstwami P (a) = 0.6, P (b) = 0.3 i P (c ) = 0.1. Ustalmy n = 3 (8 sw kodowych). Mamy 3 sowa kodowe odpowiadajace a 0.6, b 0.3 i c 0.1. Zastepujemy a i otrzymujemy 5 kodw: aa 0.36, ab 0.18, ac 0.06, b 0.3 c 0.1.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad
We zmy alfabet a, b, c (N = 3) z prawdopodobienstwami P (a) = 0.6, P (b) = 0.3 i P (c ) = 0.1. Ustalmy n = 3 (8 sw kodowych). Mamy 3 sowa kodowe odpowiadajace a 0.6, b 0.3 i c 0.1. Zastepujemy a i otrzymujemy 5 kodw: aa 0.36, ab 0.18, ac 0.06, b 0.3 c 0.1. Zastepujemy aa i otrzymujemy 7 kodw: aaa 0.216, aab 0.108, aac 0.036, ab 0.18, ac 0.06, b 0.3 i c 0.1.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad
We zmy alfabet a, b, c (N = 3) z prawdopodobienstwami P (a) = 0.6, P (b) = 0.3 i P (c ) = 0.1. Ustalmy n = 3 (8 sw kodowych). Mamy 3 sowa kodowe odpowiadajace a 0.6, b 0.3 i c 0.1. Zastepujemy a i otrzymujemy 5 kodw: aa 0.36, ab 0.18, ac 0.06, b 0.3 c 0.1. Zastepujemy aa i otrzymujemy 7 kodw: aaa 0.216, aab 0.108, aac 0.036, ab 0.18, ac 0.06, b 0.3 i c 0.1. aaa aab 000 001 aac ab ac b c ??? 010 011 100 101 110 111
Filip Zagrski Kody Tunstalla. Kodowanie arytmetyczne

Przykad

aaa aab 000 001

aac ab ac b c ??? 010 011 100 101 110 111

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

aaa aab 000 001

aac ab ac b c ??? 010 011 100 101 110 111

Zakodujmy tekst abcaabbaa.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

aaa aab 000 001

aac ab ac b c ??? 010 011 100 101 110 111

Zakodujmy tekst abcaabbaa. Otrzymujemy: 001110001101??.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

aaa aab 000 001

aac ab ac b c ??? 010 011 100 101 110 111

Zakodujmy tekst abcaabbaa. Otrzymujemy: 001110001101??. tekstu mo Na koncu ze pojawi c sie blok dla ktrego nie ma sowa kodowego, wtedy wysyamy specjalny kod i normalne kody liter.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

aaa aab 000 001

aac ab ac b c ??? 010 011 100 101 110 111

Zakodujmy tekst abcaabbaa. Otrzymujemy: 001110001101??. tekstu mo Na koncu ze pojawi c sie blok dla ktrego nie ma sowa kodowego, wtedy wysyamy specjalny kod i normalne kody liter. 001110001101111kod (a)kod (a)

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Srednia dugo sc
bitw na jeden symbol wej Srednia ilo sc sciowy.
2n 1

P (ei )
i =1

n , |ei |

gdzie ei - sowo odpowiadajace i -temu kodowi.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Srednia dugo sc
bitw na jeden symbol wej Srednia ilo sc sciowy.
2n 1

P (ei )
i =1

n , |ei |

gdzie ei - sowo odpowiadajace i -temu kodowi. Dla przykadu z poprzedniego slajdu: 3 (0.216 + 0.108 + 0.036) 3 + 3 (0.18 + 0.06) 2 + (0.3 + 0.1) 3 = 1.92 1

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Srednia dugo sc
bitw na jeden symbol wej Srednia ilo sc sciowy.
2n 1

P (ei )
i =1

n , |ei |

gdzie ei - sowo odpowiadajace i -temu kodowi. Dla przykadu z poprzedniego slajdu: 3 (0.216 + 0.108 + 0.036) 3 + 3 (0.18 + 0.06) 2 + (0.3 + 0.1) 3 = 1.92 1 kodu Huffmana dla tego przypadku Srednia dugo sc to 1.4.
Filip Zagrski Kody Tunstalla. Kodowanie arytmetyczne

Kody Tunstalla - podsumowanie

blokw wej Zmienna dugo sc sciowych, staa dugo sc wyj sciowych.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kody Tunstalla - podsumowanie

blokw wej Zmienna dugo sc sciowych, staa dugo sc wyj sciowych. na przekamania. Kompresja i odporno sc

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kody Tunstalla - podsumowanie

blokw wej Zmienna dugo sc sciowych, staa dugo sc wyj sciowych. na przekamania. Kompresja i odporno sc kodowania i dekodowania. Jednoznaczno sc

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie arytmetyczne

Tekst wej sciowy zostaje odwzorowany na liczbe z przedziau [0, 1).

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie arytmetyczne

Tekst wej sciowy zostaje odwzorowany na liczbe z przedziau [0, 1). tekstu i liczba z Kod tekstu to liczba n - dugo sc (znacznik) reprezentowany z odpowiednio dobrana dokadno scia.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie arytmetyczne

Tekst wej sciowy zostaje odwzorowany na liczbe z przedziau [0, 1). tekstu i liczba z Kod tekstu to liczba n - dugo sc (znacznik) reprezentowany z odpowiednio dobrana dokadno scia. Elementom alfabetu a1 , . . . , aN z prawdopodobienstwami p1 , . . . , pN przyporzadkowujemy przedzia [F (i ), F (i + 1)), gdzie i 1 F (i ) = j =1 pi .

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie

Mamy ciag liter x1 x2 . . . xm z alfabetu a1 , . . . , aN .

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie

Mamy ciag liter x1 x2 . . . xm z alfabetu a1 , . . . , aN . Na poczatku przedzia [l , p) = [0, 1).

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie

Mamy ciag liter x1 x2 . . . xm z alfabetu a1 , . . . , aN . Na poczatku przedzia [l , p) = [0, 1). Dla i = 1, 2, . . . , m:

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie

Mamy ciag liter x1 x2 . . . xm z alfabetu a1 , . . . , aN . Na poczatku przedzia [l , p) = [0, 1). Dla i = 1, 2, . . . , m:


Niech xi = aj .

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie

Mamy ciag liter x1 x2 . . . xm z alfabetu a1 , . . . , aN . Na poczatku przedzia [l , p) = [0, 1). Dla i = 1, 2, . . . , m:


Niech xi = aj . Wtedy d p l , p l + F (j + 1)d i l l + F (j )d .

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie

Mamy ciag liter x1 x2 . . . xm z alfabetu a1 , . . . , aN . Na poczatku przedzia [l , p) = [0, 1). Dla i = 1, 2, . . . , m:


Niech xi = aj . Wtedy d p l , p l + F (j + 1)d i l l + F (j )d .

Znacznik to dowolna liczba z przedziau [l , p), np. z = (l + p)/2.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

We zmy alfabet a, b, c z prawdopodobienstwami 0.7, 0.1, 0.2.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

We zmy alfabet a, b, c z prawdopodobienstwami 0.7, 0.1, 0.2. Zakodujmy tekst abc .

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

We zmy alfabet a, b, c z prawdopodobienstwami 0.7, 0.1, 0.2. Zakodujmy tekst abc . Na poczatku mamy przedzia: [0, 1).

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

We zmy alfabet a, b, c z prawdopodobienstwami 0.7, 0.1, 0.2. Zakodujmy tekst abc . Na poczatku mamy przedzia: [0, 1). F (1) = 0, F (2) = 0.7, F (3) = 0.8, F (4) = 1.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

We zmy alfabet a, b, c z prawdopodobienstwami 0.7, 0.1, 0.2. Zakodujmy tekst abc . Na poczatku mamy przedzia: [0, 1). F (1) = 0, F (2) = 0.7, F (3) = 0.8, F (4) = 1. Kodujemy a i otrzymujemy przedzia [0, 0.7).

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

We zmy alfabet a, b, c z prawdopodobienstwami 0.7, 0.1, 0.2. Zakodujmy tekst abc . Na poczatku mamy przedzia: [0, 1). F (1) = 0, F (2) = 0.7, F (3) = 0.8, F (4) = 1. Kodujemy a i otrzymujemy przedzia [0, 0.7). Kodujemy b i otrzymujemy przedzia [0.49, 0.56).

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

We zmy alfabet a, b, c z prawdopodobienstwami 0.7, 0.1, 0.2. Zakodujmy tekst abc . Na poczatku mamy przedzia: [0, 1). F (1) = 0, F (2) = 0.7, F (3) = 0.8, F (4) = 1. Kodujemy a i otrzymujemy przedzia [0, 0.7). Kodujemy b i otrzymujemy przedzia [0.49, 0.56). Kodujemy c i otrzymujemy przedzia [0.546, 0.56).

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

We zmy alfabet a, b, c z prawdopodobienstwami 0.7, 0.1, 0.2. Zakodujmy tekst abc . Na poczatku mamy przedzia: [0, 1). F (1) = 0, F (2) = 0.7, F (3) = 0.8, F (4) = 1. Kodujemy a i otrzymujemy przedzia [0, 0.7). Kodujemy b i otrzymujemy przedzia [0.49, 0.56). Kodujemy c i otrzymujemy przedzia [0.546, 0.56). Za znacznik mo zemy przyja c 0.553.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Wasno sci

Dla ustalonej dugo sci tekstu n, ka zdy ciag jest odwzorowany na przedzia rozaczny z przedziaami odpowiadajacymi innym ciagom. Gwarantuje to kodowania. jednoznaczno sc

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Wasno sci

Dla ustalonej dugo sci tekstu n, ka zdy ciag jest odwzorowany na przedzia rozaczny z przedziaami odpowiadajacymi innym ciagom. Gwarantuje to kodowania. jednoznaczno sc Wygenerowanie znacznika dla konkretnego ciagu nie wymaga wyznaczania bad z pamietania znacznikw innych ciagw.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Dekodowanie

tekstu i z - znacznik tekstu. Dostajemy n - dugo sc

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Dekodowanie

tekstu i z - znacznik tekstu. Dostajemy n - dugo sc l 0 i p 1.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Dekodowanie

tekstu i z - znacznik tekstu. Dostajemy n - dugo sc l 0 i p 1. Dla i = 1, 2, . . . , n:

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Dekodowanie

tekstu i z - znacznik tekstu. Dostajemy n - dugo sc l 0 i p 1. Dla i = 1, 2, . . . , n:


e Wybieramy j takie, z l + F (j )(p l ) z < l + F (j + 1)(p l );

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Dekodowanie

tekstu i z - znacznik tekstu. Dostajemy n - dugo sc l 0 i p 1. Dla i = 1, 2, . . . , n:


e Wybieramy j takie, z l + F (j )(p l ) z < l + F (j + 1)(p l ); e xi = aj ; Przyjmujemy, z

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Dekodowanie

tekstu i z - znacznik tekstu. Dostajemy n - dugo sc l 0 i p 1. Dla i = 1, 2, . . . , n:


e Wybieramy j takie, z l + F (j )(p l ) z < l + F (j + 1)(p l ); e xi = aj ; Przyjmujemy, z d p l , p l + F (j + 1)d i l l + F (j )d .

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Dekodowanie

tekstu i z - znacznik tekstu. Dostajemy n - dugo sc l 0 i p 1. Dla i = 1, 2, . . . , n:


e Wybieramy j takie, z l + F (j )(p l ) z < l + F (j + 1)(p l ); e xi = aj ; Przyjmujemy, z d p l , p l + F (j + 1)d i l l + F (j )d .

Ciag oryginalny to x1 , . . . , xn .

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

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

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad
P (a) = 0.7, P (b) = 0.1, P (c ) = 0.2, z = 0.55 i n = 3. F (1) = 0, F (2) = 0.7, F (3) = 0.8 i F (4) = 1.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad
P (a) = 0.7, P (b) = 0.1, P (c ) = 0.2, z = 0.55 i n = 3. F (1) = 0, F (2) = 0.7, F (3) = 0.8 i F (4) = 1. l = 0 i p = 1.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad
P (a) = 0.7, P (b) = 0.1, P (c ) = 0.2, z = 0.55 i n = 3. F (1) = 0, F (2) = 0.7, F (3) = 0.8 i F (4) = 1. l = 0 i p = 1. Dla a mamy 0 0.55 < 0.7, stad x1 = a, l = 0 i p = 0.7.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad
P (a) = 0.7, P (b) = 0.1, P (c ) = 0.2, z = 0.55 i n = 3. F (1) = 0, F (2) = 0.7, F (3) = 0.8 i F (4) = 1. l = 0 i p = 1. Dla a mamy 0 0.55 < 0.7, stad x1 = a, l = 0 i p = 0.7. Dla b mamy 0.49 0.55 < 0.56, stad x2 = b , l = 0.49 i p = 0.56.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad
P (a) = 0.7, P (b) = 0.1, P (c ) = 0.2, z = 0.55 i n = 3. F (1) = 0, F (2) = 0.7, F (3) = 0.8 i F (4) = 1. l = 0 i p = 1. Dla a mamy 0 0.55 < 0.7, stad x1 = a, l = 0 i p = 0.7. Dla b mamy 0.49 0.55 < 0.56, stad x2 = b , l = 0.49 i p = 0.56. Dla c mamy 0.546 0.55 < 0.56, stad x3 = c , l = 0.546 i p = 0.56.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad
P (a) = 0.7, P (b) = 0.1, P (c ) = 0.2, z = 0.55 i n = 3. F (1) = 0, F (2) = 0.7, F (3) = 0.8 i F (4) = 1. l = 0 i p = 1. Dla a mamy 0 0.55 < 0.7, stad x1 = a, l = 0 i p = 0.7. Dla b mamy 0.49 0.55 < 0.56, stad x2 = b , l = 0.49 i p = 0.56. Dla c mamy 0.546 0.55 < 0.56, stad x3 = c , l = 0.546 i p = 0.56. Odkodowany ciag to abc

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Wasno sci
Jak reprezentowa c znacznik (liczba rzeczywista) aby by jak najkrtszy.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Wasno sci
Jak reprezentowa c znacznik (liczba rzeczywista) aby by jak najkrtszy. Niech x = x1 , . . . , xn bedzie ciagiem danych o prawdopodobienstwie wystapienia P (x ) = n z znacznika z do i =1 P (xi ). Zaokraglenie m(x ) = log 1 +1 P (X )

kodowania. bitw gwarantuje jednoznaczno sc

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Wasno sci
Jak reprezentowa c znacznik (liczba rzeczywista) aby by jak najkrtszy. Niech x = x1 , . . . , xn bedzie ciagiem danych o prawdopodobienstwie wystapienia P (x ) = n z znacznika z do i =1 P (xi ). Zaokraglenie m(x ) = log 1 +1 P (X )

kodowania. bitw gwarantuje jednoznaczno sc Kod arytmetyczny dla ustalonej dugo sci tekstu jest kodem preksowym.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

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

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

P (a) = 0.7, P (b) = 0.1, P (c ) = 0.2. Kod dla tekstu abc to 0.553 = (0.100011011)2 .

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

P (a) = 0.7, P (b) = 0.1, P (c ) = 0.2. Kod dla tekstu abc to 0.553 = (0.100011011)2 . P (abc ) = 0.014.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

P (a) = 0.7, P (b) = 0.1, P (c ) = 0.2. Kod dla tekstu abc to 0.553 = (0.100011011)2 . P (abc ) = 0.014. 1 log 0.014 +1=8

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Przykad

P (a) = 0.7, P (b) = 0.1, P (c ) = 0.2. Kod dla tekstu abc to 0.553 = (0.100011011)2 . P (abc ) = 0.014. 1 log 0.014 +1=8 Czyli do zakodowania tekstu wystarczy wysa c 10001101.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Usprawnienia

Dla dugich ciagw potrzebujemy dugich liczb i przetwarzanie wymaga przeczytania caego ciagu.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Usprawnienia

Dla dugich ciagw potrzebujemy dugich liczb i przetwarzanie wymaga przeczytania caego ciagu. Mo zna zmodykowa c algorytm do pracy przyrostowej - znacznik powstaje etapami i mo zna wysya c go fragmentami.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie ze skalowaniem
Po zakodowaniu kolejnej litery: Je sli [l , p) [0, 0.5):

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie ze skalowaniem
Po zakodowaniu kolejnej litery: Je sli [l , p) [0, 0.5):
[l , p) na [2l , 2p); zamien

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie ze skalowaniem
Po zakodowaniu kolejnej litery: Je sli [l , p) [0, 0.5):
[l , p) na [2l , 2p); zamien doacz do kodu sowo 01licznik ;

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie ze skalowaniem
Po zakodowaniu kolejnej litery: Je sli [l , p) [0, 0.5):
[l , p) na [2l , 2p); zamien doacz do kodu sowo 01licznik ; licznik 0.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie ze skalowaniem
Po zakodowaniu kolejnej litery: Je sli [l , p) [0, 0.5):
[l , p) na [2l , 2p); zamien doacz do kodu sowo 01licznik ; licznik 0.

Je sli [l , p) [0.5, 1):

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie ze skalowaniem
Po zakodowaniu kolejnej litery: Je sli [l , p) [0, 0.5):
[l , p) na [2l , 2p); zamien doacz do kodu sowo 01licznik ; licznik 0.

Je sli [l , p) [0.5, 1):


[l , p) na [2l 1, 2p 1); zamien

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie ze skalowaniem
Po zakodowaniu kolejnej litery: Je sli [l , p) [0, 0.5):
[l , p) na [2l , 2p); zamien doacz do kodu sowo 01licznik ; licznik 0.

Je sli [l , p) [0.5, 1):


[l , p) na [2l 1, 2p 1); zamien doacz do kodu sowo 10licznik ;

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie ze skalowaniem
Po zakodowaniu kolejnej litery: Je sli [l , p) [0, 0.5):
[l , p) na [2l , 2p); zamien doacz do kodu sowo 01licznik ; licznik 0.

Je sli [l , p) [0.5, 1):


[l , p) na [2l 1, 2p 1); zamien doacz do kodu sowo 10licznik ; licznik 0.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie ze skalowaniem
Po zakodowaniu kolejnej litery: Je sli [l , p) [0, 0.5):
[l , p) na [2l , 2p); zamien doacz do kodu sowo 01licznik ; licznik 0.

Je sli [l , p) [0.5, 1):


[l , p) na [2l 1, 2p 1); zamien doacz do kodu sowo 10licznik ; licznik 0.

Je sli l < 0.5 < p i [l , p) [0.25, 0.75):

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie ze skalowaniem
Po zakodowaniu kolejnej litery: Je sli [l , p) [0, 0.5):
[l , p) na [2l , 2p); zamien doacz do kodu sowo 01licznik ; licznik 0.

Je sli [l , p) [0.5, 1):


[l , p) na [2l 1, 2p 1); zamien doacz do kodu sowo 10licznik ; licznik 0.

Je sli l < 0.5 < p i [l , p) [0.25, 0.75):


[l , p) na [2l 0.5, 2p 0.5); zamien

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie ze skalowaniem
Po zakodowaniu kolejnej litery: Je sli [l , p) [0, 0.5):
[l , p) na [2l , 2p); zamien doacz do kodu sowo 01licznik ; licznik 0.

Je sli [l , p) [0.5, 1):


[l , p) na [2l 1, 2p 1); zamien doacz do kodu sowo 10licznik ; licznik 0.

Je sli l < 0.5 < p i [l , p) [0.25, 0.75):


[l , p) na [2l 0.5, 2p 0.5); zamien licznik licznik + 1.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie ze skalowaniem
Po zakodowaniu kolejnej litery: Je sli [l , p) [0, 0.5):
[l , p) na [2l , 2p); zamien doacz do kodu sowo 01licznik ; licznik 0.

Je sli [l , p) [0.5, 1):


[l , p) na [2l 1, 2p 1); zamien doacz do kodu sowo 10licznik ; licznik 0.

Je sli l < 0.5 < p i [l , p) [0.25, 0.75):


[l , p) na [2l 0.5, 2p 0.5); zamien licznik licznik + 1.

Analogicznie mo zna zmodykowa c procedure dekodowania aby dekodowanie odbywao sie na podstawie otrzymywanych fragmentw.
Filip Zagrski Kody Tunstalla. Kodowanie arytmetyczne

Dalsze mo zliwe usprawnienia

Przej scie z arytmetyki zmiennoprzecinkowej na arytmetyk e cakowitoliczbowa: zastapienie przedziau m [0, 1) przez przedzia liczb cakowitych [0, 2 1].

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Dalsze mo zliwe usprawnienia

Przej scie z arytmetyki zmiennoprzecinkowej na arytmetyk e cakowitoliczbowa: zastapienie przedziau m [0, 1) przez przedzia liczb cakowitych [0, 2 1]. Problem: Jak dobra c m aby unikna c bedw zaokragle n.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie arytmetyczne algorytm cakowitoliczbowy


Odwzorowujemy istotne warto sci z przedziau [0, 1) na zbir 2m warto sci binarnych.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie arytmetyczne algorytm cakowitoliczbowy


Odwzorowujemy istotne warto sci z przedziau [0, 1) na zbir 2m warto sci binarnych.
m razy

odwzorowujemy 0 na 000 . . . 0

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie arytmetyczne algorytm cakowitoliczbowy


Odwzorowujemy istotne warto sci z przedziau [0, 1) na zbir 2m warto sci binarnych.
m razy

odwzorowujemy 0 na 000 . . . 0
m razy

odwzorowujemy 1 na 111 . . . 1

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie arytmetyczne algorytm cakowitoliczbowy


Odwzorowujemy istotne warto sci z przedziau [0, 1) na zbir 2m warto sci binarnych.
m razy

odwzorowujemy 0 na 000 . . . 0
m razy

odwzorowujemy 1 na 111 . . . 1

m1 razy

odwzorowujemy 0, 5 na 1 00 . . . 0

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie arytmetyczne algorytm cakowitoliczbowy


Odwzorowujemy istotne warto sci z przedziau [0, 1) na zbir 2m warto sci binarnych.
m razy

odwzorowujemy 0 na 000 . . . 0
m razy

odwzorowujemy 1 na 111 . . . 1

m1 razy

odwzorowujemy 0, 5 na 1 00 . . . 0

Zamieniamy wyra zenia aktualizujace tak, aby uwzgledniay zaokraglenia.

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Kodowanie arytmetyczne algorytm cakowitoliczbowy


Odwzorowujemy istotne warto sci z przedziau [0, 1) na zbir 2m warto sci binarnych.
m razy

odwzorowujemy 0 na 000 . . . 0
m razy

odwzorowujemy 1 na 111 . . . 1

m1 razy

odwzorowujemy 0, 5 na 1 00 . . . 0

Zamieniamy wyra zenia aktualizujace tak, aby uwzgledniay zaokraglenia. Skalowanie dziaa tak, jak w przypadku oryginalnego algorytmu.
Filip Zagrski Kody Tunstalla. Kodowanie arytmetyczne

Porwnanie kodowania arytmetycznego i Huffmana


rednia Niech H (S ) oznacza entropie z rda S , lA s dugo sc rednia kodu Huffmana kodu arytmetycznego, lH s dugo sc bloku: a m dugo sc H (S ) lA H (S ) + oraz H (S ) lH H (S ) + 2 m 1 m

Filip Zagrski

Kody Tunstalla. Kodowanie arytmetyczne

Porwnanie kodowania arytmetycznego i Huffmana


rednia Niech H (S ) oznacza entropie z rda S , lA s dugo sc rednia kodu Huffmana kodu arytmetycznego, lH s dugo sc bloku: a m dugo sc H (S ) lA H (S ) + oraz 2 m

1 m W przypadku kodowania Huffmana teoretyczna warto sc jest maa, jednak dla du zych warto sci m kody Huffmana sa niepraktyczne. H (S ) lH H (S ) +
Filip Zagrski Kody Tunstalla. Kodowanie arytmetyczne

You might also like