Kody Tunstalla. Kodowanie arytmetyczne

Podobne dokumenty
Kodowanie i kompresja Streszczenie Studia dzienne Wykład 9,

Kodowanie informacji

Nierówność Krafta-McMillana, Kodowanie Huffmana

Kompresja bezstratna. Entropia. Kod Huffmana

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

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

Podstawowe pojęcia. Teoria informacji

Kompresja Kodowanie arytmetyczne. Dariusz Sobczuk

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

Teoria Informacji - wykład. Kodowanie wiadomości

Temat: Algorytm kompresji plików metodą Huffmana

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

Kodowanie Shannona-Fano

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

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

Kompresja danych kodowanie Huffmana. Dariusz Sobczuk

Kodowanie i entropia

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

Teoria informacji i kodowania Ćwiczenia

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

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

Algorytmy kodowania entropijnego

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

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

Definicja. Jeśli. wtedy

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 11,

Kodowanie predykcyjne

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

Kodowanie informacji

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

Algorytmy i struktury danych. wykład 8

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

KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

Joint Photographic Experts Group

Kompresja danych DKDA (7)

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

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 6

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

Elementy teorii informacji i kodowania

Algorytmy kompresji. Kodowanie Huffmana, kodowanie arytmetyczne

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

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

Podstawy Informatyki: Kody. Korekcja błędów.

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

0-0000, , , itd

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

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

Teoria Informacji i Metody Kompresji Danych

Ćwiczenie nr 4: Kodowanie arytmetyczne, range coder

Kodowanie predykcyjne

Wstęp do Informatyki

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

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

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

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

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

Logiczny model komputera i działanie procesora. Część 1.

pobieramy pierwszą literę komunikatu i wypełniamy nią (wszystkie pozycje tą samą literą) bufor słownikowy.

ZADANIE 1. Rozwiązanie:

ZŁOŻONOŚĆ OBLICZENIOWA ALGORYTMÓW

Podstawy kompresji danych

dr inż. Jacek Naruniec

Techniki multimedialne

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 12,

Kodowanie informacji. Przygotował: Ryszard Kijanka

Temat: Algorytmy wyszukiwania wzorca w tekście

Kwantyzacja wektorowa. Kodowanie różnicowe.

Arytmetyka komputera

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

Algorytmy sortujące i wyszukujące

Podstawy Informatyki

Matematyka dyskretna

Wstęp do programowania. Reprezentacje liczb. Liczby naturalne, całkowite i rzeczywiste w układzie binarnym

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 2 WSTĘP DO INFORMATYKI

Stan wysoki (H) i stan niski (L)

W11 Kody nadmiarowe, zastosowania w transmisji danych

Kody blokowe Wykład 2, 10 III 2011

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

Kompresja obrazów w statycznych - algorytm JPEG

Wybrane metody kompresji obrazów

Zapis liczb binarnych ze znakiem

Wysokowydajna implementacja kodów nadmiarowych typu "erasure codes" z wykorzystaniem architektur wielordzeniowych

Wykład 2 Zmienne losowe i ich rozkłady

Maszyna Turinga. Algorytm. czy program???? Problem Hilberta: Przykłady algorytmów. Cechy algorytmu: Pojęcie algorytmu

Języki formalne i automaty Ćwiczenia 9

Teoria przetwarzania A/C i C/A.

Podstawy informatyki. Reprezentacja danych w systemach cyfrowych

Met Me ody numer yczne Wykład ykład Dr inż. Mic hał ha Łan Łan zon Instyt Ins ut Elektr Elektr echn iki echn i Elektrot Elektr echn olo echn

Temat 7. Dekodery, enkodery

Przykład: Σ = {0, 1} Σ - zbiór wszystkich skończonych ciagów binarnych. L 1 = {0, 00, 000,...,1, 11, 111,... } L 2 = {01, 1010, 001, 11}

Pracownia Komputerowa wykład V

Python: JPEG. Zadanie. 1. Wczytanie obrazka

Teoria liczb. Magdalena Lemańska. Magdalena Lemańska,

Systemy zapisu liczb.

Problem kodowania w automatach

Teoretyczne Podstawy Informatyki

Kodowanie transformujace. Kompresja danych. Tomasz Jurdziński. Wykład 11: Transformaty i JPEG

Przetwornik analogowo-cyfrowy

WOJEWÓDZKI KONKURS INFORMATYCZNY DLA UCZNIÓW DOTYCHCZASOWYCH GIMNAZJÓW ETAP WOJEWÓDZKI BIAŁYSTOK, 16 MARCA 2018

Excel - podstawa teoretyczna do ćwiczeń. 26 lutego 2013

Transkrypt:

Kody Tunstalla. Kodowanie arytmetyczne Kodowanie i kompresja informacji - Wykład 3 8 marca 2010

Kody Tunstalla Wszystkie słowa kodowe maja ta sama długość ale jeden kod może kodować różna liczbę liter alfabetu wejściowego.

Kody Tunstalla Wszystkie słowa kodowe maja ta sama długość ale jeden kod może kodować różna liczbę liter alfabetu wejściowego. Chcemy zmaksymalizować średnia liczbę symboli z pierwotnego alfabetu reprezentowanych przez słowa kodowe.

Kody Tunstalla Wszystkie słowa kodowe maja ta sama długość ale jeden kod może kodować różna liczbę liter alfabetu wejściowego. Chcemy zmaksymalizować średnia liczbę symboli z pierwotnego alfabetu reprezentowanych przez słowa kodowe. Alfabet wejściowy: litery a 1, a 2,..., a N z prawdopodobieństwami p 1, p 2,..., p N (N symboli).

Kody Tunstalla Wszystkie słowa kodowe maja ta sama długość ale jeden kod może kodować różna liczbę liter alfabetu wejściowego. Chcemy zmaksymalizować średnia liczbę symboli z pierwotnego alfabetu reprezentowanych przez słowa kodowe. Alfabet wejściowy: litery a 1, a 2,..., a N z prawdopodobieństwami p 1, p 2,..., p N (N symboli). Kody sa długości n bitów.

Algorytm tworzenia kodów Tunstalla Przyporzadkowujemy symbolom alfabetu N różnych słów kodowych (o długości n).

Algorytm tworzenia kodów Tunstalla Przyporzadkowujemy symbolom alfabetu N różnych słów kodowych (o długości n). Dopóki liczba niewykorzystanych słów kodowych jest większa niż N 1:

Algorytm tworzenia kodów Tunstalla Przyporzadkowujemy symbolom alfabetu N różnych słów kodowych (o długości n). Dopóki liczba niewykorzystanych słów kodowych jest większa niż N 1: wybierz słowo kodowe e odpowiadajace ciagowi o największym prawdopodobieństwie;

Algorytm tworzenia kodów Tunstalla Przyporzadkowujemy symbolom alfabetu N różnych słów kodowych (o długości n). Dopóki liczba niewykorzystanych słów kodowych jest większa niż N 1: wybierz słowo kodowe e odpowiadajace ciagowi o największym prawdopodobieństwie; usuń e z kodu;

Algorytm tworzenia kodów Tunstalla Przyporzadkowujemy symbolom alfabetu N różnych słów kodowych (o długości n). Dopóki liczba niewykorzystanych słów kodowych jest większa niż N 1: wybierz słowo kodowe e odpowiadajace ciagowi o największym prawdopodobieństwie; usuń e z kodu; dodaj do kodu ciagi powstałe z dodania a 1,..., a n jako sufiksów ciagu odpowiadajacego kodowi e (przypisz im odpowiednie prawdopodobieństwa).

Algorytm tworzenia kodów Tunstalla Przyporzadkowujemy symbolom alfabetu N różnych słów kodowych (o długości n). Dopóki liczba niewykorzystanych słów kodowych jest większa niż N 1: wybierz słowo kodowe e odpowiadajace ciagowi o największym prawdopodobieństwie; usuń e z kodu; dodaj do kodu ciagi powstałe z dodania a 1,..., a n jako sufiksów ciagu odpowiadajacego kodowi e (przypisz im odpowiednie prawdopodobieństwa). Co najmniej jedno słowo kodowe zostanie niewykorzystane

Przykład Weźmy alfabet a, b, c (N = 3) z prawdopodobieństwami P(a) = 0.6, P(b) = 0.3 i P(c) = 0.1.

Przykład Weźmy alfabet a, b, c (N = 3) z prawdopodobieństwami P(a) = 0.6, P(b) = 0.3 i P(c) = 0.1. Ustalmy n = 3 (8 słów kodowych).

Przykład Weźmy alfabet a, b, c (N = 3) z prawdopodobieństwami P(a) = 0.6, P(b) = 0.3 i P(c) = 0.1. Ustalmy n = 3 (8 słów kodowych). Mamy 3 słowa kodowe odpowiadajace a 0.6, b 0.3 i c 0.1.

Przykład Weźmy alfabet a, b, c (N = 3) z prawdopodobieństwami P(a) = 0.6, P(b) = 0.3 i P(c) = 0.1. Ustalmy n = 3 (8 słów kodowych). Mamy 3 słowa kodowe odpowiadajace a 0.6, b 0.3 i c 0.1. Zastępujemy a i otrzymujemy 5 kodów: aa 0.36, ab 0.18, ac 0.06, b 0.3 c 0.1.

Przykład Weźmy alfabet a, b, c (N = 3) z prawdopodobieństwami P(a) = 0.6, P(b) = 0.3 i P(c) = 0.1. Ustalmy n = 3 (8 słów kodowych). Mamy 3 słowa kodowe odpowiadajace a 0.6, b 0.3 i c 0.1. Zastępujemy a i otrzymujemy 5 kodów: aa 0.36, ab 0.18, ac 0.06, b 0.3 c 0.1. Zastępujemy aa i otrzymujemy 7 kodów: aaa 0.216, aab 0.108, aac 0.036, ab 0.18, ac 0.06, b 0.3 i c 0.1.

Przykład Weźmy alfabet a, b, c (N = 3) z prawdopodobieństwami P(a) = 0.6, P(b) = 0.3 i P(c) = 0.1. Ustalmy n = 3 (8 słów kodowych). Mamy 3 słowa kodowe odpowiadajace a 0.6, b 0.3 i c 0.1. Zastępujemy a i otrzymujemy 5 kodów: aa 0.36, ab 0.18, ac 0.06, b 0.3 c 0.1. Zastępujemy aa i otrzymujemy 7 kodów: aaa 0.216, aab 0.108, aac 0.036, ab 0.18, ac 0.06, b 0.3 i c 0.1. aaa aab aac ab ac b c??? 000 001 010 011 100 101 110 111

Przykład aaa aab aac ab ac b c??? 000 001 010 011 100 101 110 111

Przykład aaa aab aac ab ac b c??? 000 001 010 011 100 101 110 111 Zakodujmy tekst abcaabbaa.

Przykład aaa aab aac ab ac b c??? 000 001 010 011 100 101 110 111 Zakodujmy tekst abcaabbaa. Otrzymujemy: 001110001101??.

Przykład aaa aab aac ab ac b c??? 000 001 010 011 100 101 110 111 Zakodujmy tekst abcaabbaa. Otrzymujemy: 001110001101??. Na końcu tekstu może pojawić się blok dla którego nie ma słowa kodowego, wtedy wysyłamy specjalny kod i normalne kody liter.

Przykład aaa aab aac ab ac b c??? 000 001 010 011 100 101 110 111 Zakodujmy tekst abcaabbaa. Otrzymujemy: 001110001101??. Na końcu tekstu może pojawić się blok dla którego nie ma słowa kodowego, wtedy wysyłamy specjalny kod i normalne kody liter. 001110001101111kod(a)kod(a)

Średnia długość Średnia ilość bitów na jeden symbol wejściowy. 2 n 1 i=1 P(e i ) n e i, gdzie e i - słowo odpowiadajace i-temu kodowi.

Średnia długość Średnia ilość bitów na jeden symbol wejściowy. 2 n 1 i=1 P(e i ) n e i, gdzie e i - słowo odpowiadajace i-temu kodowi. Dla przykładu z poprzedniego slajdu: (0.216 + 0.108 + 0.036) 3 3 + (0.18 + 0.06) 3 2 + (0.3 + 0.1) 3 1 = 1.92

Średnia długość Średnia ilość bitów na jeden symbol wejściowy. 2 n 1 i=1 P(e i ) n e i, gdzie e i - słowo odpowiadajace i-temu kodowi. Dla przykładu z poprzedniego slajdu: (0.216 + 0.108 + 0.036) 3 3 + (0.18 + 0.06) 3 2 + (0.3 + 0.1) 3 1 = 1.92 Średnia długość kodu Huffmana dla tego przypadku to 1.4.

Kody Tunstalla - podsumowanie Zmienna długość bloków wejściowych, stała długość wyjściowych.

Kody Tunstalla - podsumowanie Zmienna długość bloków wejściowych, stała długość wyjściowych. Kompresja i odporność na przekłamania.

Kody Tunstalla - podsumowanie Zmienna długość bloków wejściowych, stała długość wyjściowych. Kompresja i odporność na przekłamania. Jednoznaczność kodowania i dekodowania.

Kodowanie arytmetyczne Tekst wejściowy zostaje odwzorowany na liczbę z przedziału [0, 1).

Kodowanie arytmetyczne Tekst wejściowy zostaje odwzorowany na liczbę z przedziału [0, 1). Kod tekstu to liczba n - długość tekstu i liczba z (znacznik) reprezentowany z odpowiednio dobrana dokładnościa.

Kodowanie arytmetyczne Tekst wejściowy zostaje odwzorowany na liczbę z przedziału [0, 1). Kod tekstu to liczba n - długość tekstu i liczba z (znacznik) reprezentowany z odpowiednio dobrana dokładnościa. Elementom alfabetu a 1,..., a N z prawdopodobieństwami p 1,..., p N przyporzadkowujemy przedział [F(i), F(i + 1)), gdzie F(i) = i 1 j=1 p i.

Kodowanie Mamy ciag liter x 1 x 2... x m z alfabetu a 1,..., a N.

Kodowanie Mamy ciag liter x 1 x 2... x m z alfabetu a 1,..., a N. Na poczatku przedział [l, p) = [0, 1).

Kodowanie Mamy ciag liter x 1 x 2... x m z alfabetu a 1,..., a N. Na poczatku przedział [l, p) = [0, 1). Dla i = 1, 2,..., m:

Kodowanie Mamy ciag liter x 1 x 2... x m z alfabetu a 1,..., a N. Na poczatku przedział [l, p) = [0, 1). Dla i = 1, 2,..., m: Niech x i = a j.

Kodowanie Mamy ciag liter x 1 x 2... x m z alfabetu a 1,..., a N. Na poczatku przedział [l, p) = [0, 1). Dla i = 1, 2,..., m: Niech x i = a j. Wtedy d p l, p l + F(j + 1)d i l l + F(j)d.

Kodowanie Mamy ciag liter x 1 x 2... x m z alfabetu a 1,..., a N. Na poczatku przedział [l, p) = [0, 1). Dla i = 1, 2,..., m: Niech x i = a j. Wtedy d p l, p l + F(j + 1)d i l l + F(j)d. Znacznik to dowolna liczba z przedziału [l, p), np. z = (l + p)/2.

Przykład Weźmy alfabet a, b, c z prawdopodobieństwami 0.7, 0.1, 0.2.

Przykład Weźmy alfabet a, b, c z prawdopodobieństwami 0.7, 0.1, 0.2. Zakodujmy tekst abc.

Przykład Weźmy alfabet a, b, c z prawdopodobieństwami 0.7, 0.1, 0.2. Zakodujmy tekst abc. Na poczatku mamy przedział: [0, 1).

Przykład Weźmy alfabet a, b, c z prawdopodobieństwami 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.

Przykład Weźmy alfabet a, b, c z prawdopodobieństwami 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).

Przykład Weźmy alfabet a, b, c z prawdopodobieństwami 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).

Przykład Weźmy alfabet a, b, c z prawdopodobieństwami 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).

Przykład Weźmy alfabet a, b, c z prawdopodobieństwami 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żemy przyjać 0.553.

Własności Dla ustalonej długości tekstu n, każdy ciag jest odwzorowany na przedział rozłaczny z przedziałami odpowiadajacymi innym ciagom. Gwarantuje to jednoznaczność kodowania.

Własności Dla ustalonej długości tekstu n, każdy ciag jest odwzorowany na przedział rozłaczny z przedziałami odpowiadajacymi innym ciagom. Gwarantuje to jednoznaczność kodowania. Wygenerowanie znacznika dla konkretnego ciagu nie wymaga wyznaczania badź pamiętania znaczników innych ciagów.

Dekodowanie Dostajemy n - długość tekstu i z - znacznik tekstu.

Dekodowanie Dostajemy n - długość tekstu i z - znacznik tekstu. l 0 i p 1.

Dekodowanie Dostajemy n - długość tekstu i z - znacznik tekstu. l 0 i p 1. Dla i = 1, 2,..., n:

Dekodowanie Dostajemy n - długość tekstu i z - znacznik tekstu. l 0 i p 1. Dla i = 1, 2,..., n: Wybieramy j takie, że l + F(j)(p l) z < l + F(j + 1)(p l);

Dekodowanie Dostajemy n - długość tekstu i z - znacznik tekstu. l 0 i p 1. Dla i = 1, 2,..., n: Wybieramy j takie, że l + F(j)(p l) z < l + F(j + 1)(p l); Przyjmujemy, że x i = a j ;

Dekodowanie Dostajemy n - długość tekstu i z - znacznik tekstu. l 0 i p 1. Dla i = 1, 2,..., n: Wybieramy j takie, że l + F(j)(p l) z < l + F(j + 1)(p l); Przyjmujemy, że x i = a j ; d p l, p l + F(j + 1)d i l l + F(j)d.

Dekodowanie Dostajemy n - długość tekstu i z - znacznik tekstu. l 0 i p 1. Dla i = 1, 2,..., n: Wybieramy j takie, że l + F(j)(p l) z < l + F(j + 1)(p l); Przyjmujemy, że x i = a j ; d p l, p l + F(j + 1)d i l l + F(j)d. Ciag oryginalny to x 1,..., x n.

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

Przykład 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.

Przykład 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.

Przykład 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 x 1 = a, l = 0 i p = 0.7.

Przykład 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 x 1 = a, l = 0 i p = 0.7. Dla b mamy 0.49 0.55 < 0.56, stad x 2 = b, l = 0.49 i p = 0.56.

Przykład 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 x 1 = a, l = 0 i p = 0.7. Dla b mamy 0.49 0.55 < 0.56, stad x 2 = b, l = 0.49 i p = 0.56. Dla c mamy 0.546 0.55 < 0.56, stad x 3 = c, l = 0.546 i p = 0.56.

Przykład 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 x 1 = a, l = 0 i p = 0.7. Dla b mamy 0.49 0.55 < 0.56, stad x 2 = b, l = 0.49 i p = 0.56. Dla c mamy 0.546 0.55 < 0.56, stad x 3 = c, l = 0.546 i p = 0.56. Odkodowany ciag to abc

Własności Jak reprezentować znacznik (liczba rzeczywista) aby był jak najkrótszy.

Własności Jak reprezentować znacznik (liczba rzeczywista) aby był jak najkrótszy. Niech x = x 1,..., x n będzie ciagiem danych o prawdopodobieństwie wystapienia P(x) = Π n i=1 P(x i). Zaokraglenie z znacznika z do 1 m(x) = log + 1 P(X) bitów gwarantuje jednoznaczność kodowania.

Własności Jak reprezentować znacznik (liczba rzeczywista) aby był jak najkrótszy. Niech x = x 1,..., x n będzie ciagiem danych o prawdopodobieństwie wystapienia P(x) = Π n i=1 P(x i). Zaokraglenie z znacznika z do 1 m(x) = log + 1 P(X) bitów gwarantuje jednoznaczność kodowania. Kod arytmetyczny dla ustalonej długości tekstu jest kodem prefiksowym.

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

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

Przykład 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.

Przykład 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. log 1 0.014 + 1 = 8

Przykład 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. log 1 0.014 + 1 = 8 Czyli do zakodowania tekstu wystarczy wysłać 10001101.

Usprawnienia Dla długich ciagów potrzebujemy długich liczb i przetwarzanie wymaga przeczytania całego ciagu.

Usprawnienia Dla długich ciagów potrzebujemy długich liczb i przetwarzanie wymaga przeczytania całego ciagu. Można zmodyfikować algorytm do pracy przyrostowej - znacznik powstaje etapami i można wysyłać go fragmentami.

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

Kodowanie ze skalowaniem Po zakodowaniu kolejnej litery: Jeśli [l, p) [0, 0.5): zamień [l, p) na [2l, 2p);

Kodowanie ze skalowaniem Po zakodowaniu kolejnej litery: Jeśli [l, p) [0, 0.5): zamień [l, p) na [2l, 2p); dołacz do kodu słowo 01 licznik ;

Kodowanie ze skalowaniem Po zakodowaniu kolejnej litery: Jeśli [l, p) [0, 0.5): zamień [l, p) na [2l, 2p); dołacz do kodu słowo 01 licznik ; licznik 0.

Kodowanie ze skalowaniem Po zakodowaniu kolejnej litery: Jeśli [l, p) [0, 0.5): zamień [l, p) na [2l, 2p); dołacz do kodu słowo 01 licznik ; licznik 0. Jeśli [l, p) [0.5, 1):

Kodowanie ze skalowaniem Po zakodowaniu kolejnej litery: Jeśli [l, p) [0, 0.5): zamień [l, p) na [2l, 2p); dołacz do kodu słowo 01 licznik ; licznik 0. Jeśli [l, p) [0.5, 1): zamień [l, p) na [2l 1, 2p 1);

Kodowanie ze skalowaniem Po zakodowaniu kolejnej litery: Jeśli [l, p) [0, 0.5): zamień [l, p) na [2l, 2p); dołacz do kodu słowo 01 licznik ; licznik 0. Jeśli [l, p) [0.5, 1): zamień [l, p) na [2l 1, 2p 1); doł acz do kodu słowo 10 licznik ;

Kodowanie ze skalowaniem Po zakodowaniu kolejnej litery: Jeśli [l, p) [0, 0.5): zamień [l, p) na [2l, 2p); dołacz do kodu słowo 01 licznik ; licznik 0. Jeśli [l, p) [0.5, 1): zamień [l, p) na [2l 1, 2p 1); dołacz do kodu słowo 10 licznik ; licznik 0.

Kodowanie ze skalowaniem Po zakodowaniu kolejnej litery: Jeśli [l, p) [0, 0.5): zamień [l, p) na [2l, 2p); dołacz do kodu słowo 01 licznik ; licznik 0. Jeśli [l, p) [0.5, 1): zamień [l, p) na [2l 1, 2p 1); dołacz do kodu słowo 10 licznik ; licznik 0. Jeśli l < 0.5 < p i [l, p) [0.25, 0.75):

Kodowanie ze skalowaniem Po zakodowaniu kolejnej litery: Jeśli [l, p) [0, 0.5): zamień [l, p) na [2l, 2p); dołacz do kodu słowo 01 licznik ; licznik 0. Jeśli [l, p) [0.5, 1): zamień [l, p) na [2l 1, 2p 1); dołacz do kodu słowo 10 licznik ; licznik 0. Jeśli l < 0.5 < p i [l, p) [0.25, 0.75): zamień [l, p) na [2l 0.5, 2p 0.5);

Kodowanie ze skalowaniem Po zakodowaniu kolejnej litery: Jeśli [l, p) [0, 0.5): zamień [l, p) na [2l, 2p); dołacz do kodu słowo 01 licznik ; licznik 0. Jeśli [l, p) [0.5, 1): zamień [l, p) na [2l 1, 2p 1); dołacz do kodu słowo 10 licznik ; licznik 0. Jeśli l < 0.5 < p i [l, p) [0.25, 0.75): zamień [l, p) na [2l 0.5, 2p 0.5); licznik licznik + 1.

Kodowanie ze skalowaniem Po zakodowaniu kolejnej litery: Jeśli [l, p) [0, 0.5): zamień [l, p) na [2l, 2p); dołacz do kodu słowo 01 licznik ; licznik 0. Jeśli [l, p) [0.5, 1): zamień [l, p) na [2l 1, 2p 1); dołacz do kodu słowo 10 licznik ; licznik 0. Jeśli l < 0.5 < p i [l, p) [0.25, 0.75): zamień [l, p) na [2l 0.5, 2p 0.5); licznik licznik + 1. Analogicznie można zmodyfikować procedurę dekodowania aby dekodowanie odbywało się na podstawie otrzymywanych fragmentów.

Dalsze możliwe usprawnienia Przejście z arytmetyki zmiennoprzecinkowej na arytmetykę całkowitoliczbowa: zastapienie przedziału [0, 1) przez przedział liczb całkowitych [0, 2 m 1].

Dalsze możliwe usprawnienia Przejście z arytmetyki zmiennoprzecinkowej na arytmetykę całkowitoliczbowa: zastapienie przedziału [0, 1) przez przedział liczb całkowitych [0, 2 m 1]. Problem: Jak dobrać m aby uniknać błędów zaokragleń.

Kodowanie arytmetyczne algorytm całkowitoliczbowy Odwzorowujemy istotne wartości z przedziału [0, 1) na zbiór 2 m wartości binarnych.

Kodowanie arytmetyczne algorytm całkowitoliczbowy Odwzorowujemy istotne wartości z przedziału [0, 1) na zbiór 2 m wartości binarnych. m razy {}}{ odwzorowujemy 0 na 000... 0

Kodowanie arytmetyczne algorytm całkowitoliczbowy Odwzorowujemy istotne wartości z przedziału [0, 1) na zbiór 2 m wartości binarnych. m razy {}}{ odwzorowujemy 0 na 000... 0 m razy {}}{ odwzorowujemy 1 na 111... 1

Kodowanie arytmetyczne algorytm całkowitoliczbowy Odwzorowujemy istotne wartości z przedziału [0, 1) na zbiór 2 m wartości binarnych. m razy {}}{ odwzorowujemy 0 na 000... 0 m razy {}}{ odwzorowujemy 1 na 111... 1 m 1 razy {}}{ odwzorowujemy 0, 5 na 1 00... 0

Kodowanie arytmetyczne algorytm całkowitoliczbowy Odwzorowujemy istotne wartości z przedziału [0, 1) na zbiór 2 m wartości binarnych. m razy {}}{ odwzorowujemy 0 na 000... 0 m razy {}}{ odwzorowujemy 1 na 111... 1 m 1 razy {}}{ odwzorowujemy 0, 5 na 1 00... 0 Zamieniamy wyrażenia aktualizujace tak, aby uwzględniały zaokraglenia.

Kodowanie arytmetyczne algorytm całkowitoliczbowy Odwzorowujemy istotne wartości z przedziału [0, 1) na zbiór 2 m wartości binarnych. m razy {}}{ odwzorowujemy 0 na 000... 0 m razy {}}{ odwzorowujemy 1 na 111... 1 m 1 razy {}}{ odwzorowujemy 0, 5 na 1 00... 0 Zamieniamy wyrażenia aktualizujace tak, aby uwzględniały zaokraglenia. Skalowanie działa tak, jak w przypadku oryginalnego algorytmu.

Porównanie kodowania arytmetycznego i Huffmana Niech H(S) oznacza entropię źródła S, l A średnia długość kodu arytmetycznego, l H średnia długość kodu Huffmana a m długość bloku: oraz H(S) l A H(S) + 2 m H(S) l H H(S) + 1 m

Porównanie kodowania arytmetycznego i Huffmana Niech H(S) oznacza entropię źródła S, l A średnia długość kodu arytmetycznego, l H średnia długość kodu Huffmana a m długość bloku: oraz H(S) l A H(S) + 2 m H(S) l H H(S) + 1 m W przypadku kodowania Huffmana teoretyczna wartość jest mała, jednak dla dużych wartości m kody Huffmana sa niepraktyczne.