
- •Глава 3. Представление данных в вычислительных системах
- •2. Представление рациональных чисел
- •100000001100011100111110
- •01010100
- •Число с плавающей двоичной точкой
- •3. Представление текстовых данных
- •5. Представление звуков
- •6. Упаковка данных
- •1. Алгоритмы на основе принципа Азбуки Морзе
- •2. Алгоритмы, широко используемые в современных архиваторах
- •3. Алгоритмы упаковки оцифрованных реальных сигналов
- •7. Контрольные суммы
- •8. Введение в криптографию
1. Алгоритмы на основе принципа Азбуки Морзе
Один из первых методов упаковки был предложен задолго до разработки сменной теории информации; в 1844 году Сэмюэл Морзе построил первую линию проволочного телеграфа. Система кодировки букв, известная как Азбука Морзе использовала для представления различных букв алфавита посылки различной длины, при этом длина посылки зависела от частоты использования соответствующего символа в английском языке. Часто встречающиеся символы кодировались более короткими последовательностями.
В конце сороковых годов XX века основателем современной теории информации Шенноном, и независимо от него, Фано был разработан универсальный алгоритм построения оптимальных кодов. Более известный аналог этого алгоритма был предложен несколько позже Дэвидом Хаффманом [Huffmafl 1952]. Принцип построения этих кодов в целом соответствует логике, которой руководствовался Морзе, — кодировать значения, которые часто повторяются в потоке, более короткими последовательностями битов.
2. Алгоритмы, широко используемые в современных архиваторах
Коды Хаффмана и Шеннона-Фаноустраняют автокорреляции, соответствующие неравномерности встречаемости символов, но сохраняют без изменений часто встречающиеся последовательности символов, а они ответственны за значительную часть избыточности текстов на естественных и синтетических языках. Для упаковки данных такого рода в конце 70-х Лемпелем и Зиффом было предложено семейство алгоритмов, наиболее известные из которых — LZ77 и LZW [Lempel-Ziv 1978].
Все эти алгоритмы сводятся к поиску в потоке повторяющихся последовательностей и замене этих последовательностей на их номер в динамически формируемом словаре. Различие состоит в способах кодирования номера и формирования словаря.Номер последовательности в словаре должен содержать больше бит, чем символы исходного потока, хотя бы уже для того, чтобы его можно было отличить от символа, поэтому алгоритмы Лемпеля-Виффа предполагают дальнейшее перекодирование преобразованного потока кодом Хаффмана.Большинство современных архиваторов, такие, как PkZip, GNU Zip, RAR, основаны на вариациях и аналогах алгоритмов Лемпеля-Зиффа.
При упаковке нетекстовых данных могут применяться и другие способы удаления повторений. Например, при упаковке растровых изображений широко используется метод RLE (Run-Length Encoding), когда повторяющиеся пиксели заменяются счетчиком повторений и значением пикселя. Наиболее универсальны так называемые арифметические алгоритмы, которые находят и устраняют все автокорреляции, присутствующие во входных данных. К сожалению, из-за больших вычислительных затрат эти алгоритмы и реализующие их программы не получают широкого распространения.
Все перечисленные алгоритмы способны только устранять автокорреляции, уже существующие во входном потоке. Понятно, что если автокорреляций не было, то упаковки не произойдет, поэтому гарантировать уровень упаковки эти алгоритмы не могут.
3. Алгоритмы упаковки оцифрованных реальных сигналов
Для упаковки данных, полученных оцифровкой реальных сигналов, прежде всего изображений и звука, точные алгоритмы не подходят совершенно. Дело в том, что реальный сигнал всегда сопровождается тепловым, так называемым белым (равномерно содержащим все частоты) шумом. Обратимые алгоритмы с зашумленным сигналом справиться не могут. Чтобы убедиться в этом, можно попробовать упаковать любым, или даже несколькими из распространенных архиваторов трек аудио-CD или цифровую фотографию, (чтобы с цифровой фотографией фокус получился, необходимо, чтобы кадр был снят без обработки встроенным упаковщиком камеры).
Алгоритмы JFIF (лежащий в основе распространенного формата хранения растровых изображений JPG), MPEG, MP3 [www.jpeg.org] обеспечивают гарантированный уровень упаковки. Они способны сжать в заданное число раз даже чистый белый шум. Понятно, что точно восстановить по подвергнутому такому преобразованию потоку исходный сигнал невозможно, но такой цели и не ставится, поэтому все перечисленные методы относятся к разряду необратимых.При разумно выбранном уровне упаковки результат — фотореалистичное изображение или музыкальное произведение — на взгляд (или, соответственно, на слух) практически неотличим от оригинала. Но если распаковать сжатое с потерями изображение, подвергнуть его редактированию (например, отмасштабировать или пририсовать какой-нибудь логотип), а потом упаковать снова, результат будет удручающим.