Domů » Informatika » Kódování » Aritmetické kódování

Aritmetické kódování

Aritmetické kódování je speciální kódování, které nekóduje jednotlivé symboly, ale vytváří kódové slovo pro celou zprávu. Vstupem do aritmetického kódování je vstupní text nad abecedou zdrojových jednotek, výstupem je reálné číslo z intervalu 0 včetně až 1:

€€ \mathrm{arithmetic}(N) \in \langle 0, 1) €€

Protože všechna čísla ze zadaného intervalu začínají nulou, není nutné tuto nulu vkládat do kódového slova. U aritmetického kódování je dále nutné uložit informaci o počtu zakódovaných čísel, aby dekódovací algoritmus včas skončil s dělením intervalu. To lze vyřešit například dodáním speciálního symbolu označujícího konec vstupu nebo explicitním uvedením počtu zakódovaných symbolů předem. Kromě statického aritmetického kódování existuje i aritmetické kódování adaptivní.

Pseudokód

  1. Do výstupu ulož pravděpodobnosti nebo četnosti symbolů.
  2. Nastav interval I = 0 včetně až 1.
  3. Dokud není zakódován celý text, opakuj:
    1. Přečti další symbol C.
    2. Rozděl interval I na podintervaly, jejichž velikosti jsou úměrné pravděpodobnostem symbolů.
    3. Do I ulož podinterval odpovídající symbolu C.
  4. Výstupem je libovolné číslo z intervalu I bez počáteční nuly.

Příklad

Kódování zprávy ABACAACBC#
Symbol Četnost Pravděpodobnost Kumulativní pravděpodobnost
A 4 0,4 0
B 2 0,2 0 + 0,4 = 0,4
C 3 0,3 0 + 0,4 + 0,2 = 0,6
konec 1 0,1 0 + 0,4 + 0,2 + 0,3 = 0,9
Krok Kódovaný symbol Low Range
0 0 1
1 A 0 0,4
2 B 0,16 0,8
3 A 0,16 0,032
4 C 0,1792 0,0096
5 A 0,1792 0,00384
6 A 0,1792 0,001536
7 C 0,1801216 0,0004608
8 B 0,18030592 0,00009216
9 C 0,180361216 0,000027648
10 # 0,1803860992 0,0000027648

Výsledným intervalem je 0,1803860992 v­četně až 0,180388864. Z tohoto intervalu vybereme číslo, které má nejkratší binární zápis. Zvolme například 0,18038749694­82421875, jehož binární obraz bez úvodní nuly je 0010111000101­101111.

Reference

  • předmět X36KOD na FEL ČVUT