dr inż. Jacek Naruniec

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

Kompresja Kodowanie arytmetyczne. Dariusz Sobczuk

Kody Tunstalla. Kodowanie arytmetyczne

Kompresja danych kodowanie Huffmana. Dariusz Sobczuk

Kodowanie podpasmowe. Plan 1. Zasada 2. Filtry cyfrowe 3. Podstawowy algorytm 4. Zastosowania

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

Podstawowe pojęcia. Teoria informacji

Temat: Algorytm kompresji plików metodą Huffmana

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

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

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 9,

Kodowanie informacji

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

Kompresja bezstratna. Entropia. Kod Huffmana

Nierówność Krafta-McMillana, Kodowanie Huffmana

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

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

Kompresja dźwięku w standardzie MPEG-1

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

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

ZADANIE 1. Rozwiązanie:

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

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

AKD Metody słownikowe

Definicja. Jeśli. wtedy

Przedmowa 11 Ważniejsze oznaczenia 14 Spis skrótów i akronimów 15 Wstęp 21 W.1. Obraz naturalny i cyfrowe przetwarzanie obrazów 21 W.2.

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

Stan wysoki (H) i stan niski (L)

Kwantyzacja wektorowa. Kodowanie różnicowe.

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 11,

Wstęp do informatyki- wykład 1 Systemy liczbowe

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

Kodowanie Shannona-Fano

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

Kodowanie informacji

Kodowanie predykcyjne

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

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

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

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

Teoria Informacji - wykład. Kodowanie wiadomości

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

KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

Algorytmy kodowania entropijnego

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

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

Teoria Informacji i Metody Kompresji Danych

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

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

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

Fundamentals of Data Compression

Technologie Informacyjne

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

Podstawy Informatyki

Kodowanie i entropia

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

Teoretyczne Podstawy Informatyki

Kompresja obrazów w statycznych - algorytm JPEG

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

Kodowanie informacji. Kody liczbowe

Wstęp do informatyki- wykład 2

Cyfrowe przetwarzanie i kompresja danych. dr inż.. Wojciech Zając

Przetwarzanie obrazu cyfrowego

Teoria przetwarzania A/C i C/A.

Kompresja video (MPEG)

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

ARCHITEKRURA KOMPUTERÓW Kodowanie liczb ze znakiem

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

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

0-0000, , , itd

Zestaw 3. - Zapis liczb binarnych ze znakiem 1

Wybrane metody kompresji obrazów

Teoria informacji i kodowania Ćwiczenia

Układy arytmetyczne. Joanna Ledzińska III rok EiT AGH 2011

Kwantowanie sygnałów analogowych na przykładzie sygnału mowy

Kompresja danych DKDA (7)

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

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

Konwersja dźwięku analogowego do postaci cyfrowej

LICZBY ZMIENNOPRZECINKOWE

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

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

Przetwarzanie i transmisja danych multimedialnych. Wykład 6 Metody predykcyjne. Przemysław Sękalski.

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

Wykład 2. Informatyka Stosowana. 10 października Informatyka Stosowana Wykład 2 10 października / 42

Wstęp do informatyki- wykład 1

Wykład 2. Informatyka Stosowana. 9 października Informatyka Stosowana Wykład 2 9 października / 42

Algorytmy i struktury danych. Wykład 4

Podstawy Informatyki

Kodowanie predykcyjne

Joint Photographic Experts Group

Cyfrowy zapis informacji

mgr inż. Grzegorz Kraszewski SYSTEMY MULTIMEDIALNE wykład 1, strona 1.

Podstawy transmisji multimedialnych podstawy kodowania dźwięku i obrazu Autor Wojciech Gumiński

1. Wprowadzenie 1.1. Zdefiniowanie problemu badawczego

Podstawy Informatyki dla Nauczyciela

ARCHITEKTURA KOMPUTERÓW Liczby zmiennoprzecinkowe

Kompresja sekwencji obrazów - algorytm MPEG-2

Temat 7. Dekodery, enkodery

Zastosowanie kompresji w kryptografii Piotr Piotrowski

Transkrypt:

dr inż. Jacek Naruniec J.Naruniec@ire.pw.edu.pl

Entropia jest to średnia ilość informacji przypadająca na jeden znak alfabetu. H( x) n i 1 p( i)log W rzeczywistości określa nam granicę efektywności kodowania danych. r określa system zapisu (2 dla bitowego) Jeśli r=2 i entropia będzie równa 5 oznacza to, że dla danego zbioru na jeden symbol będzie przypadało średnio minimalnie 5 bitów poniżej tej granicy nie zejdziemy. r p( i)

Metody uniwersalne: kodowanie Huffmana koder entropijny aaaaaaaabbbccccdd A 8 B 3 C 4 D - 2 [17] [9] [5] B[3] D[2] C[4] A[8]

aaaaaaaabbbccccdd entropia (na symbol w systemie dwójkowym) 1,808 1,808 * 17 znaków = 30,73 stała długość bitowa: A- 00, B-01, C 10, D-11 kod: 00000000000000000 Huffman: 10101101010101111 (34 bity) A 0, B 111, C 10, D-110 kod: 00000000111111 11110101010110110 (31 bitów) 1 [9] 1 [5] 0 Mamy minimalną średnią długość kodu! 1 [17] B[3] D[2] C[4] A[8] 0 0

Koder arytmetyczny koder entropijny, zwykle skuteczniejszy od kodera Huffmana Kodowanie sekwencji do liczby zmiennoprzecinkowej znak Ilość wystąpień pradopodobi eństwo zakres A 4 0,4 [0,0.. 0,4] B 2 0,2 [0,4.. 0.6] C 2 0,2 [0.6.. 0.8] D 2 0,2 [0.8.. 1.0]

abbddaaacd Wyznaczamy zakres w którym znajduje się liczba wyjściowa (od góry G i dołu D). Szerokość zakresu S=G-D Każdy kolejny znak zależnie od swojego zakresu z tabeli zawęża zakresy G i D. znak zakres A [0,0.. 0,4] B [0,4.. 0.6] C [0.6.. 0.8] D [0.8.. 1.0] Wynik włączając kolejne znaki: (a) D=0.0, G=0.4 (z tabelki), S = 0.4 (b) G=D + 0.6*S = 0.0 + 0.6*0.4 = 0.24 D=D + 0.4*S = 0.0 + 0.4*0.4 = 0.16 S = 0.08 (b) G=D + 0.6*S = 0.208 D=D + 0.4*S = 0.192 S=0.016 d) G= D + 1.0*S = 0.208 D = D + 0.8*S= 0.2048 Wyjście -> 0.20 Jeśli na tym kończymy kodowanie, to do 0.20 dopisujemy 48.

Formalnie algorytm zakodowania symbolu s, gdzie prawdopodobieństwo wystąpienia symbolu i to P[i]: zakres_dolny zakres_gorny zakres G - D G D zakres zakres_gorny D D zakres zakres_dolny Model rozkładu prawdopodobieństwa może być także tworzony w sposób adaptacyjny. Kompresja zachodzi, ponieważ bardziej prawdopodobne znaki w mniejszym stopniu zawężają interwał niż mniej p. Mniejszy interwał wymaga więcej znaków do zakodowania. s 1 i 1 s i 1 P[ i] P[ i]

Dekodowanie 0.2048: 0.0 0.4 0.6 0.8 1.0 0.0 0.16 0.24 0.32 0.4 0.16 0.192 0.208 0.224 0.24 a b b znak zakres A [0,0.. 0,4] B [0,4.. 0.6] C [0.6.. 0.8] D [0.8.. 1.0] Podobnie zawężamy zakres zgodnie z wybranym znakiem i określamy w którym segmencie zakresu znajduje się nasza liczba (tutaj 0.2048)

Koder arytmetyczny nie jest do końca optymalny (tj. nie daje długości bitowej określonej przez entropię), bo liczby zmiennoprzecinkowe mają skończoną dokładność. Z drugiej strony jest skuteczniejszy od kodowania Huffmana, gdzie mamy zawsze zaokrąglenie opisu do jednego bitu

Metody słownikowe (na przykładzie LZ77) Wykorzystują powtarzające się sekwencje znaków. LZ77 koduje tekst trójkami wartości (p, i, n) p wskaźnik (przesunięcie wstecz w tekście) do najdłuższego wystąpienia powtórzonej sekwencji i ilość powtórzonych znaków sekwencji n symbol kolejnego (nowego) znaku

Przykład dekompresji w LZ77: wejście (0,0,a) (0,0,b) (2,1,a) (3,2,b) wyjście a b a a b a b Można tu wprowadzić szereg usprawnień, np.: mniejsze wskaźniki reprezentowane na mniejszej ilości bitów, trzeci element nie musi być zawsze podawany.

Kompresja LZW słownikowa (np. w GIF, PDF) Zakodowanie sekwencji znaków polega na podaniu indeksu w słowniku gdzie dana sekwencja wystąpiła, następnie podanie kolejnego znaku sekwencji. Przy kodowaniu: Początkowo w słowniku znajdują się wszystkie znaki alfabetu z przyznanymi indeksami. Kodując odczytujemy z wejścia najdłuższą sekwencję znajdującą się w słowniku, na wyjście oddajemy jej indeks. Do powyższej sekwencji dodajemy kolejny znak z wejścia i powstały ciąg dodajemy do słownika.

LZW: aabcabcab 1. Alfabet początkowy: a: 1, b: 2, c:3 Krok Najdłuższa znaleziona sekwencja alfabetu Dodany symbol do alfabetu Wyjście 1 a aa: 4 1 2 a ab: 5 1 3 b bc: 6 2 4 c ca: 7 3 5 ab abc: 8 5 6 ca cab: 9 7 7

Z czego wynika kompresja? Entropia Percepcja szczegółów Predykcja

Metody bezstratne wykorzystują zwykle transformaty poprawiające wyniki kompresji entropijnej, słownikowej, stosowana jest tu między innymi transformata falkowa (JPEG-2000), odejmowanie sąsiednich pikseli lub linii (PNG), adaptacja do lokalnych cech obrazu (JPEG-LS) stosowane głównie w obrazach medycznych, astronomicznych standardowe archiwizery

Metody stratne wykorzystujące zwykle niedoskonałości naszego oka, większa dbałość o luminancję niż chrominancję (podpróbkowanie), zwykle zakładają transformaty np. DCT (JPEG), których mniej znaczące współczynniki są usuwane, inne kwantowane, zwykle połączone z kodowaniem entropijnym różnic między współczynnikami.

Wykorzystuje podobieństwo kolejnych klatek obrazu. Wykorzystuje wiedzę o przesunięciach konkretnych bloków obrazu kolejnych klatkach (predykcja) Zazwyczaj koduje różnice w kolejnych obrazach.

Czułość słuchu [źródło Wikipedia]

Zwykle kompresja stratna Bazuje na naszej ograniczonej percepcji dźwięku. Maskowanie częstotliwościowe dźwięku (głośny dźwięk jednej częstotliwości przysłania inne) Maskowanie czasowe dźwięku dźwięk głośny i od razu cichy -> cichego nie usłyszymy dźwięk cichy i od razu głośny -> cichego nie usłyszymy [źródło: http://mattmahoney.net/dc/dce.html]

Zwykle stosowany jest podział sygnału na nakładające się okna analizy.

Zwykle okna mnoży się przez funkcję, np. Hamminga czy Gaussa Eliminacja efektów blokowych Wykorzystanie transformary MDCT zamiast DCT (zakładkowo w celu wyeliminowania ostrych granic) [źródło obrazu- Wikipedia]

MP3 Podział na bloki (1W, 384 próbki) Filtry konwolucyjne dzielące pasmo na podpasma (32 pasma, po 12 próbek) Wyznaczenie wpływu maskowania danych pasm na pozostałe pasma Eliminacja podpasm poniżej progu maskowania Kwantyzacja do poziomu dającego dobrą jakość dźwięku Formowanie strumienia wyjściowego Możliwość kodowania wspólnego materiału stereo Możliwość wykorzystania kodowania Huffmana

AAC (Advanced Audio Coding), stosowany m.in. w koderze wideo H264: większa dostępna liczba kanałów (48 w stosunku do 2 lub 5.1 mp3), okna analizy zmiennej wielkości predykcja w dziedzinie częstotliwości wyższa jakość przy tej samej ilości bitów na próbkę różne tryby analizy (standardowy, low delay)

AAC algorytm kodowania (wersja uproszczona): wybór okna analizy (długie lub krótkie 2048 lub 256 próbek) transformata MDCT, kwantyzacja w zależności od modelu przychoakustycznego kodowanie entropijne

WMA kodowanie w blokach 128, 256, 512, 1024 i 2048 próbkowych. podobnie model psychoakustyczny, MDCT, kwantyzacja dość popularny istnieje również WMA bezstratny

Duże archiwum obrazów zawiera np. ponad 10 6 obiektów. Zakładając kod binarny na jeden identyfikator należałoby przeznaczyć (bitów): l b 6 log 2 10 19,93 20, Gdzie oznacza zaokrąglenie do góry (ceil)

Zakładając, że kolekcja może się powiększyć musielibyśmy: zarezerwować większą ilość bitów na znak lub przy każdym powiększeniu kolekcji poza zakres zmodyfikować wszystkie listy

Przestrzeń zajmowana przez indeks: kolekcja 10 6 obiektów - 20 bitów na symbol cechy reprezentatywne 16 bitowe - 65536 cech średnio 5 elementów listy dla jednej cechy reprezentatywnej cechy 16*65536 = 1048576 bitów (13,7% pamięci) listy 5*65536*20=6553600 bitów (86,3% pamięci) Stąd wniosek potrzebujemy efektywnych metod przechowywania list obiektowych

Zakładamy, że listy obiektowe są posortowane rosnąco względem identyfikatorów. Etap modelowania danych: uporządkowanie identyfikatorów na listach obiektowych, a następnie zastąpienie ich przez różnice kolejnych identyfikatorów, dobór statystycznego modelu różnic identyfikatorów, wybór schematu kodowania dopasowanego do modelu statystycznego.

Cecha Lista obiektów 0 30, 70, 84 1 12, 14, 19, 100 2 27, 33, 65, 80 Cecha Lista obiektów 0 30, 40, 14 1 12, 2, 5, 81 2 27, 6, 32, 25 cel: Skoncentrowanie rozkładu prawdopodobieństwa w niższych wartościach identyfikatorów.

Ogólna zależność im większa koncentracja rozkładu prawdopodobieństwa wystąpienia symboli, tym większa szansa na efektywną kompresję: p(x) p(x) x x

Zakładamy niezależność numeracji obiektów i faktu posiadania cechy c przez obiekt innymi słowy w zbiorze 100-elementowym jeśli obiekt o identyfikatorze 1 ma cechę c, to z równym prawdopodobieństwem cechę tę może mieć również obiekt o identyfikatorze 2 jak i 100. Przy powyższym założeniu identyfikatory długich list obiektowych mogą być modelowane rozkładem geometrycznym. [źródło wikipedia]

Zgodnie z teorią informacji dla danego rozkładu prawdopodobieństwa istnieje kod Huffmana optymalny, tj. dający minimalną średnią długość kodu Zależnie od rodzaju kolekcji: statyczna, np. płyty CD, DVD, BD, można wykorzystać koder arytmetyczny (dalej nie będziemy się zajmować tą opcją), dynamiczna, np. zbiory internetowe, stworzenie kodu optymalnego jest zwykle nierealne ze względu na wielkość bazy i jej zmienność.

Omówimy kodowania: globalne nieparametryzowane unarne kodowanie przedziałowe (w szczególności γ, δ) globalne parametryzowane binarne prawie stałej długości Golomba i Rice a lokalne interpolacyjne

Kod unarny U(q) dla q 0: q jedynek U( q) 11111...0 lub analogicznie: U( q) q zer 00000...1

U(5)=111110 U(2)=110 U(10)=11111111110 Kod unarny jest optymalnym kodem przedrostkowym dla rozkładu prawdopodobieństwa zadanego ciągiem geometrycznym o pierwszym wyrazie 1/2 i o ilorazie 1/2:

Kod binarny symbolu r z parametrem b B b (r), b>0, 0 r > b: wyznaczamy k log 2 b, symbole o wartościach w przedziale (0..2 k+1 -b) kodujemy zwykłym kodem binarnym na k bitach, symbole o wartościach w przedziale (2 k+1 -b, b) kodujemy zwykłym kodem binarnym malejąco na k+1 bitach

Załóżmy parametr b=5 Wyznaczamy k log 2 b 2,3 2 2 k+1 -b = 8-5 = 3 B 5 (0)=00 B 5 (1)=01 B 5 (2)=10 B 5 (3)=111 B 5 (4)=110

Jest to kod prefiksowy. Jest optymalny dla rozkładu prawdopodobieństwa zrównoważonego według kryterium 2min>max, tzn: 2min>max -> suma dwóch najmniejszych prawdopodobieństw wystąpienia symbolu jest większa niż prawdopodobieństwo wystąpienia najbardziej prawdopodobnego symbolu

2min>max: np. aaabbccccddd P(a) = 3/12 P(b) = 2/12 P(c) = 4/12 P(d) = 3/12 Najmniejsze prawd. P(a) i P(b), największe P(c) P(a)+P(b) > P(c), czyli mamy 2min>max

Kod Golomba G b, określony dla ustalonego parametru całkowitego b > 0, przypisuje symbolowi o numerze n>0 sekwencję bitów składającą się z: kodu unarnego liczby q= (n 1)/b, kodu binarnego prawie stałej długości B b (r) dla liczby r=(n 1) mod b. n = q*b + r. Jest to kod zmiennej długości. Innymi słowy kodujemy unarnie numer przedziału i pozycję w przedziale.

Załóżmy parametr b=5, kodujemy liczbę n=20 q= (n 1)/b = 19/5 =3 r=(n 1) mod b = 19 mod 5 = 4 U(q) = 1110 B 5 (r) : k log 2 b 2,3 2 2 k+1 -b = 3, czyli liczbę r = 4 kodujemy na k+1 bitach B 5 (4) = 110 W efekcie G 5 (20)=U(3)B 5 (4)=1110 110

Załóżmy parametr b=3, kodujemy liczbę n=20 q= (n 1)/b = 19/3 =6 r=(n 1) mod b = 19 mod 3 = 1 U(q) = 1111110 B 3 (r) : k log 2 b 1,5 1 2 k+1 -b = 1, czyli liczbę r = 1 kodujemy na k+1 bitach B 3 (4) = 11 W efekcie G 3 (20)=U(6)B 3 (1)=1111110 11

Załóżmy parametr b=8, kodujemy liczbę n=20 q= (n 1)/b = 19/8 =2 r=(n 1) mod b = 19 mod 8 = 3 U(q) = 110 B 8 (r) : k log 2 b 3 3 2 k+1 -b = 6, czyli liczbę r = 3 kodujemy na k bitach B 8 (4) = 011 W efekcie G 8 (20)=U(2)B 8 (4)=110 011

Kod Golomba, w którym parametr b jest potęgą liczby 2 to kod taki nazywa się kodem Rice a (od twórcy). Kod Rice a charakteryzuje się tym, że część binarna prawie stałej długości liczby jest zawsze tej samej długości (czyli jest tak naprawdę zwykłym kodem binarnym) niezależnie od kodowanego symbolu

Rice Rice Rice [źródło- Wikipedia - tam parametr m odpowiada naszemu parametrowi b]

Dla rozkładu geometrycznego P(n) = pq n 1 z prawdopodobieństwem sukcesu p i porażki q=1 p optymalnym kodem przedrostkowym jest kod Golomba, w którym parametr b dobieramy jako:

p=0.2 => b=3 p=0.5 => b=1 p=0.8 => b=1

Kod przedziałowy π zakłada podział zbioru liczb na rozłączne przedziały π q o długościach b q >0, q=0,1,. Jeśli kodowana liczba n należy do przedziału π q, a r jest odległością od lewej krawędzi przedziału (r=n-a q ), to π(n)=u(q)bbq (r) Innymi słowy unarnie kodujemy numer przedziału do którego należy liczba, a binarnie ze zmienną długością i parametrem równym długości przedziału pozycję w danym przedziale

Mając 3 przedziały: [1..5], [6..11], [12..15] Liczbę 3 zakodujemy jako U(0)B 5 (3) Liczbę 6 zakodujemy jako U(1)B 6 (0)

Geometryczny kod przedziałowy to szczególna rodzina kodów przedziałowych G a,b w których długość przedziałów zmienia się w postępie geometrycznym, tj. b q =ba q, q = 0, 1, 2,.... Kod geometryczny, w którym a=2, b=1 nazywany jest kodem γ (gamma). Dla tego kodu przedziały kształtują się według wzorów: czyli: [1..1][2..3],[4..7], [8..15], [16..31] itd.

Kodowanie γ(10) to: przedziały to [1..1],[2..3],[4..7],[8..15],[16..31] itd. 10 należy do 4 przedziału, więc pierwszy człon to U(3) =1110 Następnie mamy kodowanie B 8 (2)=010 Cały kod ma postać 1110 010. Dla bardzo dużych liczb naturalnych kodowanie unarne w kodowaniu przedziałowym może nie być efektywne, dlatego proponuje się rozwiązanie hybrydowe, w którym kod unarny zastępuje się kodem γ.

Zakładane prawdopodobieństwo: P( x) 1 2x 2

Kodowanie δ (delta) polega na zastąpieniu w kodzie γ liczby unarnej U(q) kodem γ(q+1). Kodowanie jest często skuteczniejsze na realnych danych od kodowania γ. δ(10): Przedział 4, a γ(4)=11000 B(2)=010 δ(10) = 11000 010 Dla liczby 1.000.000 kod δ ma 28 bitów, dla - γ 39

Weźmy listę w której mamy 20 obiektów: (7; 3,8,9,11,12,13,17) Zamiast kodować różnice między elementami spróbujmy domyślać się wartości liczb, tzn.: Jeśli znamy drugi wskaźnik do dokumentu 8, to wiemy, że pierwszy wskaźnik będzie w zakresie 1..7, co potrafimy zakodować na 3 bitach. Jeżeli znamy drugi i czwarty wskaźnik do dokumentu (8 i 11), to wartość trzeciego wskaźnika jest 9 lub 10, co potrafimy zapisać na 1 bicie. Jeśli znamy czwarty i szósty wskaźnik (11 i 13), to piąty jest oczywisty. Powyższe rozważania zakładają, że znamy listę (3; 8,11,13) Do tej listy (3; 8,11,13) stosujemy dokładnie tę samą metodę.

(3; 8,11,13) Jeśli znamy liczbę 11, to elementy po lewej kodujemy w zakresie (1..10), co zajmuje 4 bity, po prawej (9..20) 4 bity Ale jeśli wiemy, że po lewej i prawej stronie pierwszego wskaźnika (8) mamy jakąś liczbę, to możemy być pewni, że liczba po lewej będzie z zakresu 2..9. To znaczy, że możemy ją zakodować na 3 bitach. Tak samo wiemy, że 13 po lewej i prawej stronie ma liczbę, czyli jest w zakresie [13..19], więc kodujemy ją na 3 bitach. Na końcu zostaje nam liczba 11. Ale jeśli wiemy, że ma 3 obiekty po lewej i po prawej stronie, to możemy ją zakodować w zakresie 4..17. Daje nam to zwykle lepsze efekty niż w kodowaniu Golomba.

Wybrane kolekcje obiektów tekstowych: Biblia: pojedynczy werset biblii jest obiektem identyfikowanym przez numer księgi, rozdziału w księdze i wersetu w księdze. GNUbib: kolekcja notek bibliograficznych w dziedzinie informatyki. TREC (Text REtrieval Conference): kolekcja dokumentów z różnych źródeł używana w badaniach systemów wyszukiwania informacji.

W wykładzie wykorzystałem metariały: I. Witten i inni: Managing Gigabytes: Compressing and Indexing Documents and Images, W.Skarbek: materiały wykładowe przedmiotu INM