Eliášův delta kód

Eliasův delta kód  je univerzální kód pro kódování kladných celých čísel, který vyvinul Peter Elias.

Kódování

Algoritmus pro kódování čísla N:

  1. Počet  – počet platných bitů v binární reprezentaci čísla .
  2. Počet  – počet platných bitů v binární reprezentaci čísla .
  3. Zapište si nuly a jednu jednotku.
  4. Append  - nejméně významné bity binární reprezentace čísla bez nejvýznamnějšího ( ).
  5. Append  - nejméně významné bity binární reprezentace čísla bez nejvýznamnějšího ( ).

Jinak lze tento algoritmus popsat následovně:

  1. Počet  – počet platných bitů v binární reprezentaci čísla .
  2. Kódujte pomocí Eliasova gama kódu (γ(L)).
  3. Přidejte binární reprezentaci čísla bez úvodního.

To znamená, že v delta i Elias gama kódu je číslo zakódováno jako exponent (kapacita čísla - počet platných bitů) a mantisa (ve skutečnosti významné bity), ale v gama kódu je exponent zapsán v unární forma a v delta kódu je na něj opět aplikováno gama kódování.

Příklad kódování čísla 10:

  1. Binární reprezentace čísla má 4 platné bity ( ).
  2. Binární reprezentace čísla má 3 platné bity ( ).
  3. Píšeme nulu a jednu jednotku → .001
  4. Sečteme bity čísla bez nejvyšší jednotky → .00
  5. Sečteme bity čísla bez nejvyšší jednotky → .010
  6. Výsledek - 00100010.

Výsledky kódování prvních 17 čísel (pro srovnání je zobrazen také gama kód):

N L M delta kód Délka,
kousek
Odhadovaná
pravděpodobnost
gama kód Délka,
kousek
γ(L)
jeden jeden jeden jeden jeden 1/2 jeden jeden
2 2 2 01 0 0 čtyři 1/16 01 0 3
3 2 2 01 0 jeden čtyři 1/16 01 jeden 3
čtyři 3 2 01 1 00 5 1/32 001 00 5
5 3 2 01 1 01 5 1/32 001 01 5
6 3 2 01 1 deset 5 1/32 001 deset 5
7 3 2 01 1 jedenáct 5 1/32 001 jedenáct 5
osm čtyři 3 001 00 000 osm 1/256 0001 000 7
9 čtyři 3 001 00 001 osm 1/256 0001 001 7
deset čtyři 3 001 00 010 osm 1/256 0001 010 7
jedenáct čtyři 3 001 00 011 osm 1/256 0001 011 7
12 čtyři 3 001 00 100 osm 1/256 0001 100 7
13 čtyři 3 001 00 101 osm 1/256 0001 101 7
čtrnáct čtyři 3 001 00 110 osm 1/256 0001 110 7
patnáct čtyři 3 001 00 111 osm 1/256 0001 111 7
16 5 3 001 01 0000 9 1/512 00001 0000 9
17 5 3 001 01 0001 9 1/512 00001 0001 9

S dodatečným zpracováním původních hodnot lze delta kód použít také ke kódování nulových a záporných celých čísel (viz: Elias Gamma Code#Generalization ).

Dekódování

Algoritmus pro dekódování čísla z Eliasova delta kódu:

  1. Počet  - počet nul ve vstupním proudu do první.
  2. Po jedničce následují nejméně významné bity čísla , přečti je a přičti hodnotu k výsledku . Pokud jsou bity ve vstupním toku zapsány od vysoké k nízké, pak první po úvodní řadě nul lze číst jako součást binární reprezentace čísla , v takovém případě není nutné přidávat v samostatném kroku .
  3. Dále následují nejméně významné bity čísla , přečtěte je a přidejte hodnotu k výsledku .

Příklad dekódování bitové sekvence 001010001 :

  1. Přečtěte si z proudu 001 a určete, že na začátku jsou 2 úvodní nuly ( ).
  2. Přečtěte si další bity z proudu → 01 ; to dává .
  3. Přečíst další bity z proudu → 0001 ; to dává .

Účinnost

Pro čísla 2, 3, 8…15 je delta kód delší než gama kód, pro čísla 1, 4…7, 16…31 je délka delta kódu stejná jako délka gama kódu, pro všechny ostatní čísla, delta kód je kratší než gama kód. V souladu s tím je delta kód tím méně ziskový než gama kód, čím nerovnoměrnější je rozložení pravděpodobnosti kódovaných čísel a tím pravděpodobnější jsou jejich hodnoty, když se blíží nule.

Viz také

Literatura