Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Кодирование длин серий23 января 2011Оглавление: 1. Кодирование длин серий 2. Применение 3. Простой пример реализации алгоритма на Delphi/Pascal простой алгоритм сжатия данных, который оперирует сериями данных, то есть последовательностями, в которых один и тот же символ встречается несколько раз подряд. При кодировании строка одинаковых символов, составляющих серию, заменяется строкой, которая содержит сам повторяющийся символ и количество его повторов. Пример использованияРассмотрим изображение, содержащее простой чёрный текст на сплошном белом фоне. Здесь будет много серий белых пикселей в пустых местах, и много коротких серий чёрных пикселей в тексте. В качестве примера приведена некая произвольная строка изображения в черно-белом варианте. Здесь B представляет чёрный пиксель, а W обозначает белый:
Если мы применим простое кодирование длин серий к этой строке, то получим следующее:
Последняя запись интерпретируется как «двенадцать W», «одна B», «двенадцать W», «три B» и т. д. Таким образом, код представляет исходные 67 символов в виде всего лишь 18. Однако, в случае, если строка состоит из большого количества неповторяющихся символов, её объем может вырасти.
Проблема решается достаточно просто. Алфавит, в котором записаны длины серий, разделяется на две части. Алфавит целых чисел можно, например, разделить на две части: положительные и отрицательные. Положительные используют для записи количества повторяющихся одинаковых символов, а отрицательные — для записи количества неодинаковых.
Так как численные типы данных на компьютере всегда имеют некоторый предел, возникает еще одна проблема. Предположим, мы используем signed char для записи длин серий. Тогда мы не можем записать серию длиннее 127 символов одной парой "длина-символ". Если подряд записано 256 символов A, их разделяют на минимальное количество групп:
Запись на некотором языке программирования алгоритма RLE с учетом этих ограничений нетривиальна. Конечно, кодирование, которое используется для хранения изображений, оперирует с двоичными данными, а не с символами ASCII, как в рассмотренном примере, однако принцип остаётся тот же. Просмотров: 3249
|