Kodowanie Eliasa

Kodowanie Eliasa
Rodzaj

kompresja

Złożoność
Pamięciowa

zależnie od implementacji

Kodowanie Eliasa – sposób kodowania liczb całkowitych większych od zera, za pomocą słów kodowych o zmiennej długości; liczba bitów jest proporcjonalna do kodowanej wartości. Istnieją trzy sposoby kodowania: gamma delta oraz omega

Kodowanie jest używane m.in. w różnych metodach kompresji, wymagających zapisywania liczb z szerokiego przedziału wartości (np. przesunięć w metodzie LZR, pochodnej LZ77).

Kodowanie gamma

Algorytm kodowania

  • Liczba jest zapisywana w naturalnym kodzie binarnym.
  • – liczba cyfr znaczących w zapisie dwójkowym.
  • Słowo kodowe składa się:
    1. z bitu o wartości zero powtórzonego razy,
    2. liczby dwójkowej.

Liczba bitów słowa kodowego zależy od wartości i wynosi

Algorytm dekodowania

  • Policzenie bitów o wartości 0 – daje to liczbę
  • Kolejne bitów to zapisana binarnie liczba

Przykład kodowania

Niech – składa się z bitów.

Słowo kodowe ma długość 13 bitów:

Kodowanie delta

Algorytm kodowania

Podobnie jak w kodowaniu gamma pierwszym krokiem jest reprezentacja w kodzie binarnym, o bitach znaczących. Z liczby dwójkowej jest usuwana najbardziej znacząca cyfra (jedynka). Następnie liczba jest przedstawiana w kodzie gamma. Jeśli przez oznaczymy liczbę bitów znaczących wówczas słowo kodowe składa się z pól:

  • zer,
  • liczba przedstawiona binarnie,
  • liczba przedstawiana binarnie z usuniętą najbardziej znaczącą cyfrą.

Liczba bitów słowa kodowego zależy od wartości i wynosi

Algorytm dekodowania

  • Zdekodowanie liczby
  • Odczytanie słowa -bitowego.
  • Wstawienie bitu o wartości 1 na początek słowa – liczba

Przykład kodowania

Niech – składa się z bitów. Z kolei przedstawione w postaci binarnej to składa się z bitów.

Pamiętając, że najbardziej znaczący bit jest usuwany z reprezentacji słowo kodowe ma postać

Kodowanie omega

Algorytm kodowania

Kodowanie jest nieco bardziej złożone i przeprowadzane iteracyjnie, w kolejnych krokach podsłowa binarne są doklejane na początek słowa kodowego.

Algorytm przebiega następująco:

  1. zapisz bit 0 (znacznik końca),
  2. dopóki
    • zapisz dwójkowo liczbę
    • liczba bitów zapisana krok wcześniej, pomniejszona o 1

Liczba bitów również zależy od wartości W -tym kroku zapisywane jest bitów, A więc

Algorytm dekodowania

Dekodowanie przebiega według schematu:

  1. dopóki kolejny bit nie ma wartości 0:
    • wartość zapisana na kolejnych bitach
  2. – ostatnia odczytana wartość.

Przykład kodowania

Również zostanie zakodowana liczba

Krok k Słowo binarne Liczba bitów
10
211311100017
361103
42102
51koniec kodowania

Po połączeniu słów binarnych w odwrotnej kolejności, słowo kodowe będzie miało postać

Kody dla liczb od 1 do 32

Gamma Delta Omega
x kod liczba bitów kod liczba bitów kod liczba bitów
11111 01
2010301004 1003
3011301014 1103
4001005011005 1010006
5001015011015 1010106
6001105011105 1011006
7001115011115 1011106
800010007001000008 11100007
900010017001000018 11100107
1000010107001000108 11101007
1100010117001000118 11101107
1200011007001001008 11110007
1300011017001001018 11110107
1400011107001001108 11111007
1500011117001001118 11111107
160000100009 00101000091010010000011
170000100019 00101000191010010001011
180000100109 00101001091010010010011
190000100119 00101001191010010011011
200000101009 00101010091010010100011
210000101019 00101010191010010101011
220000101109 00101011091010010110011
230000101119 00101011191010010111011
240000110009 00101100091010011000011
250000110019 00101100191010011001011
260000110109 00101101091010011010011
270000110119 00101101191010011011011
280000111009 00101110091010011100011
290000111019 00101110191010011101011
300000111109 00101111091010011110011
310000111119 00101111191010011111011
320000010000011 00110000001010101100000012

Zobacz też