2. Bezeztrátová komprese

2.5. Aritmetické kódování

J. J. Risanen v roce 1976.

Vstupní soubor je převeden na
číslo z intervalu <0;1).

Je třeba znát pravděpodobnost výskytu znaků ve vstupním souboru.

  • Řadíme od nejmenší po největší.

Z pravděpodobností výskytu jednotlivých prvků se vytvoří na intervalu <0;1) podintervaly, které ho vyplní.

  • Pole mezd obsahuje dolní meze podintervalů.
  • Pole mezh obsahuje horní meze podintervalů.
  • Součást vstupního i výstupního souboru (+ počet znaků).

Komprese

  • Základní inicializace – h = 1; d = 0; s = 1.
  • Cyklus postupně pro jednotlivé znaky:
    • h := d + s · mezh(aktuálního symbolu)
    • d := d + s · mezd(aktuálního symbolu)
    • s := h - d
  • Po provedení cyklu pro poslední znak vybereme reprezentanta K z aktuálního intervalu (d; h).

Dekomprese

Označíme K jako K1 a podle intervalu, do něhož patří, dekomprimujeme první znak

Další znaky dekomprimujeme postupně na základě obecného vzorce pro ítého
reprezentanta: (Ki-1 - mezdi-1) / si-1