алгоритм lzma

[Ред] Кодер і декодер

[Ред] Кодер

  1. Функція приймає масив і довжину масиву як аргументи, якщо довжина не була передана, то масив не обробляється.
  2. Ініціалізіруем змінні, для збереження останнього елемента і для зберігання попереднього чісла.Ініціалізіруем цикл.
  3. У циклі: 3.1 Зберігаємо елемент з індексом. 3.2 Обчислюємо різницю між елементом під номером і та Перезаписуємо її в елемент масиву з індексом.

[Ред] Декодер

  1. Ініціалізіруем змінну для зберігання останнього символу.
  2. Ініціалізіруем цикл.
  3. У циклі: 3.1 Додаємо до цього елементу значення попереднього елемента. 3.2 Зберігаємо значення поточного елемента.

[Ред] Інтервальне кодування

При інтервальному кодуванні всі символи повідомлення кодуються як одне число, для того щоб досягти найкращого коефіцієнта стиснення. Це працює ефективно з ймовірності появи символу не є ступенями двійки. Інтервальне кодування працює так:

  1. Виділяється досить великий діапазон цілих чисел і дається оцінка ймовірності входження для символів.
  2. Вихідний діапазон чисел ділиться на піддіапазони, розмір яких пропорційний ймовірності входження символу, за який вони відповідають.
  3. Кожен символ повідомлення кодується, після чого діапазон скорочується до розміру діапазону тільки що закодованого символу і знову ділиться по можливостям.

У декодере повинні бути таке ж розподіл ймовірностей як і при кодуванні.

[Ред] Приклад

Закодируем рядок. Для початку припустимо її через дельта фільтр. Тоді вихідна рядок набуде вигляду:

.

Як ми бачимо, тепер в нашій рядку замість різних символів різних символу. Далі застосуємо до отриманої рядку метод «ковзаючого» вікна:

Схожі статті