Слайд 2
В связи с развитием информационных технологий кодирование является
центральным вопросом при решении самых разных задач программирования, таких
как:
представление данных произвольной структуры (числа, текст, графика) в памяти компьютера;
обеспечение помехоустойчивости при передаче данных по каналам связи;
сжатие информации в базах данных.
Слайд 3
Основной моделью, которую изучает
теория информации, является
модель
системы передачи сигналов:
Начальным звеном в приведенной выше модели является
источник информации.
Рассмотрим дискретные источники без памяти, в которых выходом является последовательность символов некоторого фиксированного алфавита.
Слайд 4
Определение. Множество всех различных символов, порождаемых некоторым источником,
называется алфавитом источника,
количество символов в этом множестве – размер
алфавита источника.
Например, текст на русском языке порождается источником с алфавитом из 33 русских букв, пробела и знаков препинания.
Определение.
Кодирование дискретного источника заключается в сопоставлении символов алфавита А источника символам некоторого другого алфавита В.
Слайд 5
Определение. Обычно символу исходного алфавита А ставится в
соответствие не один, а группа символов алфавита В, которая
называется кодовым словом.
Определение. Кодовый алфавит – множество различных символов, используемых для записи кодовых слов.
Определение. Кодом называется совокупность всех кодовых слов, применяемых для представления порождаемых источником символов.
Пример. Азбука Морзе является известным кодом из символов телеграфного алфавита, в котором буквам русского языка соответствуют кодовые слова (последовательности) из «точек» и «тире».
Слайд 6
Далее будем рассматривать двоичное кодирование, т.е. размер кодового
алфавита равен 2.
Определение. Конечную последовательность битов (нулей или
единиц) назовем кодовым словом, а
количество битов в этой последовательности – длиной кодового слова.
Пример. Код ASCII (американский стандартный код для обмена информацией) каждому символу ставит в однозначное соответствие кодовое слово длиной 8 бит.
Слайд 7
Дадим строгое определение кодирования.
Пусть даны алфавит источника A
= {a1,a2,…an}, кодовый алфавит B = {b1,b2,…,bn}.
Обозначим через
A* множество всевозможных последовательностей в алфавите А.
Множество всех сообщений в алфавите А обозначим S.
Тогда отображение F: S→B*, которое преобразует множество сообщений S в кодовые слова в алфавите В, называется кодированием.
Обратное отображение F-1 (если оно существует) называется декодированием.
Слайд 8
Задача кодирования сообщения ставится
следующим образом:
требуется при
заданных алфавитах А и В
и множестве сообщений S
найти такое кодирование F, которое обладает определенными свойствами и оптимально в некотором смысле.
Свойства, которые требуются от кодирования,
могут быть различными. Приведем некоторые из них:
существование декодирования;
помехоустойчивость или исправление ошибок при кодировании;
обладает заданной трудоемкостью (время, объем памяти).
Слайд 11
Под сжатием данных понимается компактное представление данных, достигаемое
за счет избыточности информации, содержащейся в сообщениях.
Большое значение
для практического использования имеет неискажающее сжатие, позволяющее полностью восстановить исходное сообщение.
При неискажающем сжатии происходит кодирование сообщения перед началом передачи или хранения, а после окончания процесса сообщение однозначно декодируется.
Это соответствует модели канала без шума (помех).
Слайд 12
Методы сжатия данных можно разделить на две группы:
статические методы и адаптивные методы.
Статические методы сжатия данных предназначены
для кодирования конкретных источников информации с известной статистической структурой, порождающих определенное множество сообщений.
Эти методы базируются на знании статистической структуры исходных данных.
К наиболее известным статическим методам сжатия относятся коды Хаффмана, Шеннона, Фано, Гилберта-Мура, арифметический код и другие методы, которые используют известные сведения о вероятностях порождения источником различных символов или их сочетаний.
Слайд 13
Если статистика источника информации неизвестна или изменяется с
течением времени, то для кодирования сообщений такого источника применяются
адаптивные методы сжатия.
В адаптивных методах при кодировании очередного символа текста используются сведения о ранее закодированной части сообщения для оценки вероятности появления очередного символа.
В процессе кодирования адаптивные методы «настраиваются» на статистическую структуру кодируемых сообщений, т.е. коды символов меняются в зависимости от накопленной статистики данных.
Это позволяет адаптивным методам эффективно и быстро кодировать сообщение за один просмотр.
Слайд 14
КОДИРОВАНИЕ ЦЕЛЫХ ЧИСЕЛ
(CODING OF INTEGERS)
Рассмотрим семейство методов
кодирования,
не учитывающих вероятности появления символов источника.
Поскольку все
символы алфавита источника можно пронумеровать, то в будем считать, что алфавит источника состоит из целых чисел.
Каждому целому числу из определенного диапазона ставится в соответствие свое кодовое слово.
Поэтому эту группу методов также называют представлением целых чисел (representation of integers).
Слайд 15
Основная идея кодирования целых чисел:
отдельно кодировать порядок значения
элемента («экспоненту» ) и отдельно – значащие цифры значения
(«мантиссу» i).
Значащие цифры мантиссы начинаются со старшей ненулевой цифры,
порядок числа определяется позицией старшей ненулевой цифры в двоичной записи числа.
Как и при десятичной записи,
порядок равен числу цифр в записи числа без предшествующих незначащих нулей.
Пример. Двоичное число 000001101
Порядок равен 4, мантисса – 1101
Слайд 16
Рассмотрим две группы методов кодирования целых чисел.
Условно
их можно обозначить так:
Fixed + Variable
(фиксированная длина порядка
+ переменная длина мантиссы)
Variable + Variable
(переменная длина порядка + переменная длина мантиссы)
Слайд 17
Коды класса Fixed + Variable
В кодах
класса Fixed + Variable
под запись значения порядка числа
отводится фиксированное количество бит,
а значение порядка числа определяет, сколько бит потребуется под запись мантиссы.
Для кодирования целого числа необходимо произвести с числом две операции:
определение порядка числа
выделение бит мантиссы
Можно также хранить в памяти заранее построенную таблицу кодовых слов и по ней получать код числа.
Слайд 18
Пример. Код класса Fixed + Variable.
Пусть R =
15 – количество бит исходного числа.
Отведем E = 4
бита под порядок, т.к. R ≤ 24.
При записи мантиссы можно сэкономить 1 бит:
не писать первую единицу, т.к. это всегда будет
только единица.
Таким образом, количество бит мантиссы меньше на один бит, чем значение порядка числа.
Слайд 20
Коды класса Variable + Variable
В качестве кода числа
берется двоичная последовательность, построенная следующим образом:
несколько нулей (количество
нулей равно значению порядка числа), затем мантисса переменной длины.
Слайд 21
Если в рассмотренном выше коде исключить кодовое слово
для нуля, то можно уменьшить длины кодовых слов на
1 бит, убрав первый нуль во всех кодовых словах.
Таким образом строится гамма-код Элиаса (γ-код Элиаса).
Слайд 22
Другим примером кода класса Variable + Variable
является омега-код
Элиаса (ω-код Элиаса).
В нем первое значение (кодовое слово
для единицы) задается отдельно.
Другие кодовые слова состоят из последовательности групп длиной L1 L2 …Lm , начинающихся с единицы.
Конец всей последовательности задается нулевым битом.
Длина первой группы составляет 2 бита, длина каждой следующей группы равна двоичному значению битов предыдущей группы плюс 1.
Значение битов последней группы является итоговым значением всей последовательности групп, т.е. первые m-1 групп служат лишь для указания длины последней группы, которая содержит собственно мантиссу числа.
Слайд 24
В омега-коде Элиаса ( P. Elias ):
При кодировании
формируется сначала последняя группа, затем предпоследняя и т.д., пока
процесс не будет завершен.
При декодировании, наоборот, сначала считывается первая группа, по значению ее битов определяется длина следующей группы, или итоговое значение числа, если следующая группа – 0.
Слайд 25
Рассмотренные типы кодов могут быть эффективны в следующих
случаях:
Вероятности чисел убывают с ростом значений элементов и их
распределение близко к такому:
P(x) ≥ P(x+1), при любом x,
т.е. маленькие числа встречаются чаще, чем большие.
Диапазон значений входных элементов не ограничен или неизвестен.
Например, при кодировании 32-битовых чисел реально большинство чисел маленькие, но могут быть и большие.
При использовании в составе других схем кодирования, например, кодировании длин серий.
Слайд 26
Кодирование длин серий
Run Length Encoding (RLE)
Метод кодирования
длин серий (RLE), предложенный П. Элиасом (P.Elias), при построении использует
коды целых чисел.
Входной поток для кодирования рассматривается как последовательность из нулей и единиц.
Идея кодирования заключается в том, чтобы кодировать последовательности одинаковых элементов (например, нулей) как целые числа, указывающие количество элементов в этой последовательности.
Последовательность одинаковых элементов называется серией, количество элементов в ней – длиной серии.