Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТІ_л15-16.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
458.24 Кб
Скачать

15.1.2. Другий варіант алгоритму rle

Ідея другого варіанту алгоритму полягає у тому, щоб не кодувати кожний одиничний символ двома байтами типу ''довжина''+''символ'', а вказувати на кількість символів, які не перекодовуються при стисненні у байті ''довжина'', тобто кількість символів, які кодер пропускає.

Отже, префіксом повторюваності як і у попередньому алгоритмі служить одна одиниця у старшому біті байту ''довжини'', а префікс 0 (0 у старшому біті байту ''довжини'') означає, що за байтом ''довжина'' йде відповідна кількість (вказується у байті ''довжина'') неповторюваних символів, тобто

1 7 Біт Символ

0 7 біт

Символ

Символ

Отже, у цьому варіанті алгоритму на довжину також накладається обмеження – 7 біт, тобто можуть кодуватися ланцюжки довжиною не більшою за 127 символів, а також стільки ж символів пропускатися, тобто декодер, зустрівши префікс 0 зрозуміє, що наступні символів не стискалися кодером.

Таким чином, такий варіант алгоритму має більший максимальний ступінь стиснення ніж перший варіант алгоритму за рахунок того, що послідовність уже з 127 байт стискається у 2 байти, тобто у 64 рази і, крім того, якщо зустрічається послідовність неповторюваних символів, то не кодується кожний символ двома байтами, а двома байтами кодується вся послідовність неповторюваних символів.

Такий варіант алгоритму реалізований у форматах TIFF та TGA

15.1.3. Третій варіант алгоритму rle

Цей варіант алгоритму кодування довжин повторень використовується для стиснення таких цифрових даних, у яких є ділянки з великою кількістю нульових даних.

Ідея алгоритму полягає у тому, що кожного разу, коли серед цифрових даних зустрічається «0», то він кодується двома числами. Перше – число 0, яке є признаком початку кодування довжини ланцюжка нулів, друге – кількість нулів у ланцюжку. Якщо середня кількість нулів у всіх ланцюжках, включаючи ланцюжки з одного нуля (поодинокі нулі), є більше двох, то стиснення інформації відбудеться. Якщо ж у даних присутня велика кількість поодиноких нулів, то цей варіант алгоритму є не ефективним і може привести навіть до збільшення розміру файлу.

Приклад 15.2. Нехай потрібно закодувати такі цифрові дані

5 7 55 8 71 0 0 0 0 99 5 13 0 31 23 0 0 0 0 0 3 67 0 0 7 …

довжиною 25 байт. У результаті роботи алгоритму отримуємо кодове слово

5 7 55 8 71 0 4 99 5 13 0 1 31 23 0 5 3 67 0 2 7

довжиною 21 байт. Ефективність (коефіцієнт) стиснення , тобто стиснення даних у цьому випадку відбувається, оскільки середня кількість нулів у всіх ланцюжках дорівнює 3 ( ). Для наглядності (і тільки) усі ланцюжки з нулів у вхідній послідовності виділено жирним шрифтом. У кодовому слові знову ж таки тільки для наглядності виділено ту пару чисел, якою кодується кожний ланцюжок.

Приклад 15.3. Нехай потрібно закодувати цифрові дані, серед яких є поодинокі нулі, наприклад:

5 7 0 0 55 0 8 71 0 99 5 13 0 31 23 0 3 67 0 0 7 0 45 0 9…

довжиною 25 байт. У результаті роботи алгоритму отримуємо кодове слово

5 7 0 2 55 0 1 8 71 0 1 99 5 13 0 1 31 23 0 1 3 67 0 2 7 0 1 45 0 1 9

довжиною 31 байт. Ефективність (коефіцієнт) стиснення , тобто не тільки не відбувається стиснення даних, але й кодування за цим варіантом алгоритму приводить до збільшення розміру файлу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]