[Ред] Кодер і декодер
[Ред] Кодер
- Функція приймає масив і довжину масиву як аргументи, якщо довжина не була передана, то масив не обробляється.
- Ініціалізіруем змінні, для збереження останнього елемента і для зберігання попереднього чісла.Ініціалізіруем цикл.
- У циклі: 3.1 Зберігаємо елемент з індексом. 3.2 Обчислюємо різницю між елементом під номером і та Перезаписуємо її в елемент масиву з індексом.
[Ред] Декодер
- Ініціалізіруем змінну для зберігання останнього символу.
- Ініціалізіруем цикл.
- У циклі: 3.1 Додаємо до цього елементу значення попереднього елемента. 3.2 Зберігаємо значення поточного елемента.
[Ред] Інтервальне кодування
При інтервальному кодуванні всі символи повідомлення кодуються як одне число, для того щоб досягти найкращого коефіцієнта стиснення. Це працює ефективно з ймовірності появи символу не є ступенями двійки. Інтервальне кодування працює так:
- Виділяється досить великий діапазон цілих чисел і дається оцінка ймовірності входження для символів.
- Вихідний діапазон чисел ділиться на піддіапазони, розмір яких пропорційний ймовірності входження символу, за який вони відповідають.
- Кожен символ повідомлення кодується, після чого діапазон скорочується до розміру діапазону тільки що закодованого символу і знову ділиться по можливостям.
У декодере повинні бути таке ж розподіл ймовірностей як і при кодуванні.
[Ред] Приклад
Закодируем рядок. Для початку припустимо її через дельта фільтр. Тоді вихідна рядок набуде вигляду:
.
Як ми бачимо, тепер в нашій рядку замість різних символів різних символу. Далі застосуємо до отриманої рядку метод «ковзаючого» вікна: