Definicja. Jeśli. wtedy

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

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

Kompresja danych kodowanie Huffmana. Dariusz Sobczuk

Kompresja bezstratna. Entropia. Kod Huffmana

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

Kompresja Kodowanie arytmetyczne. Dariusz Sobczuk

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

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

Nierówność Krafta-McMillana, Kodowanie Huffmana

Teoria informacji i kodowania Ćwiczenia

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

Temat: Algorytm kompresji plików metodą Huffmana

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

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

Algorytmy kodowania entropijnego

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 9,

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

Kodowanie informacji

Teoria Informacji - wykład. Kodowanie wiadomości

Kodowanie i entropia

0-0000, , , itd

Elementy teorii informacji i kodowania

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

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

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

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

Kody Tunstalla. Kodowanie arytmetyczne

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

ZADANIE 1. Rozwiązanie:

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

Algorytmy kompresji. Kodowanie Huffmana, kodowanie arytmetyczne

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

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Wstęp do Informatyki

1.1. Pozycyjne systemy liczbowe

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

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

Ćwiczenie nr 4: Kodowanie arytmetyczne, range coder

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 11,

Algorytmy i struktury danych. wykład 8

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

Algorytmy i struktury danych

Technologie Informacyjne

Wstęp do Programowania potok funkcyjny

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Wysokość drzewa Głębokość węzła

Podstawy kompresji danych

dr inż. Jacek Naruniec

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

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

Według raportu ISO z 1988 roku algorytm JPEG składa się z następujących kroków: 0.5, = V i, j. /Q i, j

ALGORYTMY BEZSTRATNEJ KOMPRESJI DANYCH

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

Kodowanie informacji

Kody Huffmana. Konrad Wypyski. 11 lutego 2006 roku

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

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

EGZAMIN MATURALNY Z INFORMATYKI

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Matematyka dyskretna - 7.Drzewa

Podstawowe pojęcia. Teoria informacji

Kodowanie Shannona-Fano

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 6

Kodowanie informacji. Kody liczbowe

Algorytmy i Struktury Danych, 9. ćwiczenia

Drzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Kompresja danych DKDA (7)

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

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

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

Kodowanie predykcyjne

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Kodowanie informacji. Przygotował: Ryszard Kijanka

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

Algorytmy i struktury danych. Wykład 4

Kwantyzacja wektorowa. Kodowanie różnicowe.

Tablice z haszowaniem

Luty 2001 Algorytmy (4) 2000/2001

Joint Photographic Experts Group

Maszyna Turinga języki

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Porządek symetryczny: right(x)

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Pracownia Komputerowa wykład V

Języki i metodyka programowania. Reprezentacja danych w systemach komputerowych

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5.

Teoria Informacji i Metody Kompresji Danych

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Optymalizacja ciągła

Kompresja obrazów w statycznych - algorytm JPEG

Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.

KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

Techniki multimedialne

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

Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie)

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

Transkrypt:

Definicja Jeśli wtedy

Cel kompresji: zredukowanie do minimum oczekiwanego (średniego) kosztu gdzie l i jest długością słowa kodu c i kodującego symbol a i Definicja Definicje Efektywność kodowania określamy jako H 00% L śr 2 Kod jest przedrostkowy, jeśli nie możemy otrzymać żadnego słowa kodu z innego słowa kodu poprzez dodanie do niego zer lub jedynek (tzn. Żadne słowo kodu nie jest przedrostkiem innego słowa kodu)

Definicja Może istnieć wiele takich kodów Twierdzenie Ważne twierdzenie nazywa się nierównością Krafta

Przykład. Rozważmy tekst Stanisława Wyspiańskiego: Jakżeż ja się uspokoję Jakżeż ja się uspokoję - Pełne strachu oczy moje, Pełne grozy myśli moje, Pełne trwogi serce moje, Pełne drżenia piersi moje - Jakżeż ja się uspokoję Założenia: Każdy symbol odpowiada jednemu znakowi Prawdopodobieństwo wystąpienia każdego symbolu jest jednakowo prawdopodobne Przyjmujemy kod ASCII rozszerzony o polskie litery, czyli ISO 8859-2

Przykład. Rozważmy tekst Stanisława Wyspiańskiego: Jakżeż ja się uspokoję Jakżeż ja się uspokoję - Pełne strachu oczy moje, Pełne grozy myśli moje, Pełne trwogi serce moje, Pełne drżenia piersi moje - Jakżeż ja się uspokoję Założenia: Każdy symbol odpowiada jednemu znakowi Prawdopodobieństwo wystąpienia każdego symbolu jest jednakowo prawdopodobne Przyjmujemy kod ASCII rozszerzony o polskie litery, czyli ISO 8859-2

Przykład. Rozważmy tekst Stanisława Wyspiańskiego: Jakżeż ja się uspokoję Jakżeż ja się uspokoję - Pełne strachu oczy moje, Pełne grozy myśli moje, Pełne trwogi serce moje, Pełne drżenia piersi moje - Jakżeż ja się uspokoję Założenia: Każdy symbol odpowiada jednemu znakowi Prawdopodobieństwo wystąpienia każdego symbolu jest jednakowo prawdopodobne Przyjmujemy kod ASCII rozszerzony o polskie litery, czyli ISO 8859-2 Model bardziej złożony

Przykład. Rozważmy tekst Stanisława Wyspiańskiego: Jakżeż ja się uspokoję Jakżeż ja się uspokoję - Pełne strachu oczy moje, Pełne grozy myśli moje, Pełne trwogi serce moje, Pełne drżenia piersi moje - Jakżeż ja się uspokoję Założenia: Każdy symbol odpowiada jednemu znakowi Prawdopodobieństwo wystąpienia każdego symbolu jest jednakowo prawdopodobne Przyjmujemy kod ASCII rozszerzony o polskie litery, czyli ISO 8859-2 Model bardziej złożony

Model bardziej złożony Dodatkowe koszty

Częstość występowania symboli w sekwencji:

Rozważmy model wykorzystujący informacje o częstości występowania symboli

Przykładowy kod Dodatkowe koszty

Definicja Zalety Bardzo szybkie kodowanie dzięki prostocie konstrukcji kodów i ich regularności Brak potrzeby przesyłania informacji o budowie kodu do dekodera Wady Zwykle słaby współczynnik kompresji Możliwa ekspansja danych jeśli rozkład prawdopodobieństwa występowania symboli nie pasuje do założonego przy konstrukcji kodu

Kod unarny Cechy Zastosowania Długość: x bitów

Kod binarny Cechy Zastosowania Długość:

Definicja Komentarz: Cechy Zastosowania Długość:

Definicja Komentarz: Cechy Zastosowania Długość:

Liczby Fibonacciego definiuje następująca zależność rekurencyjna: przy czym Każda liczba całkowita dodatnia może być zapisana jako suma różnych liczb Fibonacciego Definicja Przykład

Odwrócona reprezentacja Zeckedndofra W trakcie kodowania wygodniejsza jest reprezentacja, w której najmniej znaczący bit znajduje się na początku Przykład Każdą liczbę całkowitą można przedstawić w odwróconej reprezentacji Zeckendorfa w taki sposób, aby nie zawierała dwóch następujących po sobie jedynek.

Definicja Komentarz

Definicja Komentarz

Zalety Prosta budowa Wady Nieco trudniejszy w obliczaniu niż wcześniejsze kody Stosunkowo dobry współczynnik kompresji dla danych, dla których prawdopodobieństwo występowania symboli maleje dla kolejnych symboli alfabetu

Definicja Zalety Wady

Podstawowe twierdzenie Shannona o kodowaniu bezszumowym Dla bezpamięciowego źródła S o entropii H(S) możliwe jest przypisanie ciągom k symboli źródła, słów kodu przedrostkowego tak, że spełnione jest H(S) L k / k < H(S) + / k asymptotycznie, możliwe jest uzyskanie średniej długości kodu (w przeliczeniu na pojedynczy symbol) równej entropii źródła optymalna długość słowa kodowego dla symbolu o prawdopodobieństwie p równa jest log (p) (czyli autoinformacji dla tego symbolu) można zbudować koder entropijny o efektywności bliskiej 00%

Jak wygenerować kod przedrostkowy? Problem: Mamy wyznaczony przez model rozkład prawdopodobieństwa symboli źródła p, p 2, p 3, p 4... p N, : p i = Znamy optymalne długości słów kodowych (tj. przybliżone długości słów optymalnego kodu przedrostkowego) l, l 2, l 3, l 4... l N : l i = log (p ) i Wiemy jaki warunek muszą spełniać długości słów kodowych aby istniał kod jednoznacznie dekodowalny (nierówność Krafta) 2 -l i Chcemy wyznaczyć Kod przedrostkowy o minimalnej średniej długości kodu szukamy: dokładnych długości słów szukamy: postaci (kolejnych bitów) słów

Algorytm Shannona-Fano generuje kod przedrostkowy dla zadanego rozkładu prawdopodobieństwa symboli alfabetu. Krok : Ustaw symbole alfabetu źródła w ciąg s uporządkowane zgodnie z prawdopodobieństwem ich użycia; Krok 2: AlgorytmShannonaFano(ciąg s) if (s zawiera dwa symbole) dołącz 0 do słowa kodowego jednego z symboli, do słowa drugiego symbolu; elseif (s zawiera więcej niż dwa symbole) podziel s na dwa podciągi s i s2 tak, by różnica między sumą prawdopodobieństw symboli w podciągach była najmniejsza; dołącz 0 do słów kodowych symboli w s i do słów symboli w s2; AlgorytmShannonaFano(s); AlgorytmShannonaFano(s2); endif;

Przykład: kodujemy ciąg abracadabra W tabeli mamy ciąg symboli alfabetu źródła i kolejne kroki budowania słów kodowych ciąg s c d r b a częstość symbolu / / 2/ 2/ 5/ ciąg s i s 2 c d r b a słowo symbolu 0 0 0 0 ciąg s i s 2 c d r b słowo symbolu 0 0 0 0 0 0 ciąg s i s 2 c d słowo symbolu 0 0 0 0 0 ciąg s 2 i s 22 r b słowo symbolu 0 0 0 wynik 0 0 0 0 0 0 0 0

Przykład: kodujemy ciąg abracadabra Można wygenerować kod o innych długościach słów ciąg s c d r b a częstość symbolu / / 2/ 2/ 5/ ciąg s i s 2 c d r b a słowo symbolu 0 0 0 0 ciąg s i s 2 c d r b słowo symbolu 0 0 0 0 0 0 0 ciąg s i s 2 c d r słowo symbolu 0 0 0 0 0 0 0 0 ciąg s i s 2 c d słowo symbolu 0 0 0 0 0 0 0 wynik 0 0 0 0 0 0 0 0 0 0

Algorytm Huffmana generuje kod przedrostkowy dla zadanego rozkładu prawdopodobieństwa symboli alfabetu. W algorytmie Huffmana buduje się drzewo binarne, zwane drzewem Huffmana. Każdemu z liści odpowiada pojedynczy symbol alfabetu źródła. Z każdym węzłem skojarzona jest waga równa łącznemu prawdopodobieństwu liści w poddrzewie dla którego ten węzeł jest korzeniem 2. Utwórz n drzew, gdzie n jest rozmiarem alfabetu źródła. Każdemu z symboli alfabetu źródła odpowiada pojedyncze drzewo składające się wyłącznie z korzenia i mające wagę równą prawdopodobieństwu wystąpienia danego symbolu. 3. Wyznacz dwa drzewa o najmniejszych wagach i utwórz z nich nowe drzewo, w którym dwa właśnie wyznaczone drzewa te są synami korzenia o wadze równej sumie ich wag. Powtarzaj krok 2 aż pozostanie tylko jedno drzewo (n razy). 4. Słowo kodowe kodu Huffmana dla danego symbolu znajduje się przechodząc ścieżką od korzenia drzewa Huffmana do liścia odpowiadającego temu symbolowi (i-ty bit słowa kodowego ma wartość 0, jeżeli i-ta krawędź ścieżki prowadzi do lewego syna i-tego węzła, a jeżeli do prawego).

Przykład: kodujemy ciąg abracadabra 2. Wyznacz dwa drzewa o najmniejszych wagach i utwórz z nich nowe drzewo, w którym dwa właśnie wyznaczone drzewa te są synami korzenia o wadze równej sumie ich wag. Powtarzaj krok 2 aż pozostanie tylko jedno drzewo (n razy). 4/ 0 2/ 0 5/ 2/ / / 2/ a b c d r

Przykład: kodujemy ciąg abracadabra 2. Wyznacz dwa drzewa o najmniejszych wagach i utwórz z nich nowe drzewo, w którym dwa właśnie wyznaczone drzewa te są synami korzenia o wadze równej sumie ich wag. Powtarzaj krok 2 aż pozostanie tylko jedno drzewo (n razy). 0 6/ 0 4/ 0 2/ 0 5/ 2/ / / 2/ a b c d r

0 6/ 0 3. Słowo kodowe kodu Huffmana dla danego symbolu znajduje się przechodząc ścieżką od korzenia drzewa Huffmana do liścia odpowiadającego temu symbolowi (i-ty bit słowa kodowego ma wartość 0, jeżeli i-ta krawędź ścieżki prowadzi do lewego syna i-tego węzła, a jeżeli do prawego). 4/ 0 symbol słowo kodowe 0 2/ a 0 b 0 0 c 0 0 5/ 2/ / / 2/ d 0 a b c d r r

Własności kodów Huffmana Podobnie, jak algorytm Shannona-Fano, przedstawiony algorytm jest niedeterministyczny niedeterminizm można łatwo usunąć kanoniczne kodowanie Huffmana Efektywnośc kodów Huffmana jest typowo nieznacznie większa niż Shannona-Fano (dla przykładu abracadabra jest taka sama) algorytm Huffmana jest prostszy symbol Shannon-Fano () Shannon-Fano (2) Huffman a 0 b 0 0 0 0 c 0 0 0 0 0 0 0 0 0 d 0 0 0 0 0 0 r 0 0 0 0

Zalety o prosty o szybki Wady o nieefektywny, gdy prawdopodobieństwo wystąpienia jednego z symboli alfabetu źródła jest duże (ale można kodować ciągi symboli) o dwuprzebiegowy (koszt transmisji modelu może być duży, nie do zastosowania wprost do kodowania on-line)

Użycie algorytmu Huffmana w adaptacyjnym modelu jest możliwe Metoda brute-force każdorazowo po zakodowniu symbolu buduj od nowa drzewo Huffmana ( Uwaga na Zero Frequency Problem )... ale w praktyce zbyt kosztowne Ale mamy algorytm generujący kod zbliżony do kodu Huffmana, nadający się do zastosowania w algorytmie adaptacyjnym. Drzewo Huffmana budowane jest przyrostowo możliwa jest aktualizacja modelu został wynaleziony niezależnie przez Fallera i Gallagera udoskonalony przez Cormacka i Horspoola oraz (niezależnie) przez Knutha następnie udoskonalony przez Vittera

Na czym polega? Budujemy przyrostowo drzewo binarne, którego węzły zawierają liczniki częstości, a liście są dodatkowo skojarzone z symbolami alfabetu źródła Drzewo ma własność rodzeństwa, gdy:. każdy węzeł nie będący liściem ma 2 potomków; 2. przechodząc węzły w kolejności z góry do dołu, a na danym poziomie od prawej do lewej, otrzymamy ciąg węzłów o nierosnących licznikach. Drzewo mające własność rodzeństwa jest drzewem Huffmana (tw. Fallera- Gallagera)

Przykład: drzewo mające własność rodzeństwa 5 6 a 2 r 4 2 2 b c d

Budowane drzewo zawiera liść (0-węzeł) reprezentujący wszystkie symbole, które jeszcze nie wystąpiły w kodowanym ciągu Kodowanie rozpoczynamy od drzewa składającego się wyłącznie z 0- węzła Używamy pomocniczej struktury węzły, listy dwukierunkowej zawierającej węzły drzewa uporządkowane w kolejności przeglądania drzewa z góry do dołu, a na danym poziomie od prawej do lewej Podlistę listy węzły składającą się z wszystkich węzłów o wartości licznika i nazywamy blokiem-i, a pierwszy węzeł takiego bloku liderem

DynamiczneKodowanieHuffmanaFGK(symbol s) p = liść zawierający symbol s; wyprowadź słowo kodowe dla s (*); if p jest 0-węzłem utwórz nowy węzeł q dla symolu s; q.licznik = ; p = nowy węzeł w miejscu 0-węzła będący rodzicem 0-węzła i węzła q; p.licznik = ; else p.licznik++; endif while p nie jest korzeniem if p narusza własność rodzeństwa if lider bloku-i zawierającego p nie jest rodzicem p zamień p z liderem; endif endif p = rodzic(p); p.licznik++; endwhile

a p b r 0 2 p 0 q a a a 0 0 q b b Przykład: kodujemy ciąg abrr, wstawienie symbolu b

r 2 2 2 p 2 2 a p a a 0 b b b 0 0 r r wstawienie symbolu r (przywróć własność rodzeństwa)

r 2 2 3 p p 2 2 2 a a a b b b 0 0 0 r r r wstawienie symbolu r

r 3 3 3 2 2 2 a a a b b b 0 0 2 0 2 r p r p r ponowne wstawienie symbolu r (przywróć własność rodzeństwa)

3 4 p 2 2 2 a r b b 0 2 0 p r a ponowne wstawienie symbolu r (przywróć własność rodzeństwa)

4 2 2 r b 0 a postać drzewa po przetworzeniu ciągu abrr

Dodatkowe założenie: w bloku-i węzłów najpierw znajdują się węzły wewnętrzne, później liście minimalizujemy głębokość drzewa bardziej złożone staje się przywracanie własności rodzeństwa ciąg o długości s zakodujemy na nie więcej niż h+s bitach, gdzie h to liczba bitów dla kodowania statycznego Huffmana

Algorytm adaptacyjny można zbudować z kilku stałych modeli Ale po kolei... Zmodyfikowane kody binarne Rodzina kodów Golomba Rodzina kodów Golomba-Rice a Model danych dla parametrycznej rodziny kodów (model algorytmu FELICS)

Prefiksowy kod dla skończonego alfabetu, np. dla liczb 0.. j- słowa kodowe o długości log(j) lub log (j) bitów, gdzie j to rozmiar alfabetu właściwie to rodzina kodów (długość słowa kodowego kodu binarnego dla alfabetu j symboli to log(j) ) Symbol Alfabet 0.. 4 0.. 5 0.. 6 0.. 7 0. 0 0. 0 0. 0 0. 0 0 0. 0. 0. 0 0. 0 0 2. 0. 0 0. 0. 0 0 3. 0. 0. 0 0. 0 4.. 0. 0. 0 0 5.. 0. 0 6.. 0 7.

Generowanie słowa kodowego kodujemy liczbę i zmodyfikowanym kodem binarnym dla liczb 0.. j, przyjmijmy N = log(j) i n = 2 N jeżeli i < n j zakoduj i za pomocą N -bitowego kodu binarnego else zakoduj i + n j za pomocą N -bitowego kodu binarnego Własności zmodyfikowanego kodu binarnego długość słowa kodowego: log(j) lub log (j) dla j = 2 N kod staje się N -bitowym kodem binarnym liczba dłuższych słów kodowych jest zawsze parzysta

parametryczna rodzina kodów przeznaczona do kodowania nieujemnych liczb całkowitych nieskończona parametrem kodu jest całkowite m, m > 0 zawiera kody optymalne dla wykładniczego rozkładu prawdopodobieństwa symboli (dla niektórych parametrów rozkładu) (nadaje się do źródeł o rozkładzie nierosnącym) słowa kodowe łatwe w generacji i dekodowaniu

Generowanie słowa kodowego kodujemy liczbę x kodem Golomba z parametrem m np. 8 kodem Golomba z parametrem 3 prefiks słowa: x/m 8/3 = 2 zakodowane unarnie (kod α Eliasa) 0 sufiks słowa: x mod m 8 mod 3 = 2 zakodowane zmodyfikowanym kodem binarnym dla przedziału [0, m ]

Jest to szczególny przypadek kodu Golomba zauważony już przez Golomba i niezależnie od niego odkryty przez Rice a. Kody Golomba są szczególnie proste, gdy m = 2 k kodujemy liczbę x kodem Golomba-Rice a z parametrem k prefiks słowa: x/ 2 k zakodowane unarnie (kod α Eliasa) x >> k sufiks słowa: x mod 2 k zakodowane zmodyfikowanym kodem binarnym dla przedziału [0, m ] k najmniej znaczących bitów x

Dla skończonego alfabetu używamy tylko części nieskończonej rodziny. Przyjmijmy rozmiar alfabetu 2 N dla rodziny Golomba kody o m > 2 N- mają słowa kodowe wszystkich symboli alfabetu dłuższe od kodu o m = 2 N- dla kodów Golomba- Rice a kody o k > N mają słowa wszystkich symboli alfabetu dłuższe od kodu o k = N sensowne jest używanie początkowych 2 N- kodów sensowne jest używanie początkowych N kodów (k = 0.. N )

Rodziny Golomba-Rice a można użyć do kodowania ciągów symboli o wykładniczym rozkładzie prawdopodobieństwa. (rozkład często spotykany w kompresji obrazów, dźwięków... ) Jeżeli parametr rozkładu jest nieznany, lub zmienia się w trakcie pracy źródła to parametr kodu Golomba-Rice a trzeba dobierać adaptacyjnie. Jak to zrobić? Wybierajmy ten kod, który jest najlepszy dla już przetworzonych symboli Jak to zrobić?

Algorytm modelowania zastosowany przez Howarda i Vittera w algorytmie bezstratnej kompresji obrazów FELICS. Idea Dla każdego kodu z rodziny utrzymuj licznik (tablica liczników) licznik liczby bitów, którą by uzyskano, kodując dotychczas przetworzoną część ciągu tym kodem. Po zakodowaniu symbolu zwiększ licznik każdego z kodów o długość słowa kodowego właśnie zakodowanego symbolu w kodzie odpowiadającym licznikowi Do kodowania symbolu użyj kodu o najmniejszym liczniku

Udoskonalenie: okresowo, gdy wartość najmniejszego z liczników przekroczy pewien próg, podziel wszystkie liczniki przez 2 unikniemy przepełnienia zwiększymy znaczenie symboli kodowanych niedawno Ww. metoda to tylko część całego algorytmu (i tylko część modelu) Metoda z FELICS nadaje się do każdej rodziny Jeszcze prostsza metoda istnieje dla rodziny Golomba-Rice a zastosowana przez Weinberger, Seroussi, Sapiro w algorytmie LOCO(JPEG-LS) niezależnie od rozmiaru alfabetu mamy 2 liczniki (licznik zakodowanych symboli i licznik sumy wartości tych symboli)

Warto się zapoznać Idea kodowania arytmetycznego Koncepcja implementacji dla liczb o ograniczonej precyzji Wybrane algorytmy MQ-Coder Range-Coder Szybki model dla kodera arytmetycznego