Algoritmul lzma

[coder și decodor]

[edit] Encoder

  1. Funcția ia o matrice și lungimea matricei ca argumente, dacă lungimea nu a fost trecută, atunci matricea nu este procesată.
  2. Inițializați variabilele pentru a stoca ultimul element și pentru a stoca numărul anterior. Inițializați bucla.
  3. În ciclu: 3.1 Salvați elementul cu indexul. 3.2 Calculați diferența dintre elementul de sub numărul și suprascrieți-l în elementul matricei cu indexul.

[edit] Decodor

  1. Inițializați variabila pentru a stoca ultimul caracter.
  2. Inițializați bucla.
  3. În buclă: 3.1 Adăugați la acest element valoarea elementului anterior. 3.2 Salvați valoarea elementului curent.

[edit] Codarea intervalelor







În codificarea intervalului, toate simbolurile mesajului sunt codificate ca un număr pentru a obține cel mai bun raport de compresie. Aceasta funcționează eficient cu probabilitatea apariției unui simbol care nu este o putere a doi. Codificarea intervalelor funcționează astfel:







  1. Se alocă o gamă suficientă de numere întregi și se evaluează probabilitatea apariției simbolurilor.
  2. Domeniul inițial de numere este împărțit în subranje, a căror mărime este proporțională cu probabilitatea de apariție a simbolului pentru care corespund.
  3. Fiecare caracter al mesajului este codificat, după care intervalul este redus la dimensiunea intervalului simbolului codificat și împărțit din nou de probabilități.

Decodorul ar trebui să aibă aceeași distribuție a probabilității ca atunci când se codifică.

[edit] Exemplu

Codificăm șirul. Mai întâi, hai să trecem prin filtrul delta. Apoi șirul original va arăta astfel:

.

După cum vedem, acum în linia noastră, în loc de personaje diferite de caractere diferite. Apoi aplicăm metoda ferestrei glisante la linia rezultată:







Articole similare

Trimiteți-le prietenilor: