Избыточность информационных потоков и ее практическое использование.
Приведение ДЭФ по модулю и свойства приведения для четного и нечетного N.
Приведем примеры матриц ДЭФ для двух вариантов , четного и нечетного. Рассмотрим четное , например . Матрица значений напоминает таблицу умножения (см.рис.5.5).
Рис. 5.5. Матрица ДЭФ при |
Матрица а) представляет перечисление фаз в их абсолютном выражении. В частности, фаза последней функции (правый нижний угол) соответствует шести полным оборотам (и еще немного).
Матрица б) соответствует формуле приведения, согласно которой из фазовой координаты вычитается число, удаляющее кратное число оборотов вектора. В приведенном нами примере, удаляются цифры, кратные 8. Остаток должен лежать в пределах от 0 до . В частности, в элементе, стоящем на пересечении пятого столбца и седьмой строки (это число 20), при получается .
Приведение по модулю является базовым преобразованием в ЦОС.
Обратим внимание на вторую матрицу б). Она приведена по модулю . При этом остатки от приведения лежат в пределах заданного множества . Приведение сводится к тому, что остаток находится в пределах от 0 до .
Стоит отметить, что нами принято четное число . При этом получается семейство комплексно сопряженных функций, симметричных относительно центра сопряжения. В варианте центром сопряжения является функция с номером . Если выделить эту функцию и изменять значения аргумента в пределах от 0 до , получаем после приведения, т. е. в остатках, матрицу типа б).
|
|
Приведение по модулю является фундаментальной операцией, приводящей к оригинальным последствиям. Рассмотрим матрицу ДЭФ в полном и приведенном варианте при , т. е. нечетном.
Рис. 5.6. Матрица ДЭФ при |
В итоге после приведения по модулю получается два семейства комплексно сопряженных функций; количество таких пар равно , а чисто действительная функция одна – нулевая. Это свойство обобщается на любое , причем везде есть разница между четными и нечетными значениями.
Эффективное кодирование. Коды Шеннона-Фано.
Сущность кодов заключается в том, что они неравномерные, то есть с неодинаковым числом разрядов, причем длина кода обратно пропорциональна вероятности его появления. Еще одна замечательная особенность эффективных кодов – они не требуют разделителей, то есть специальных символов, разделяющих соседние кодовые комбинации. Это достигается при соблюдении простого правила: более короткие коды не являются началом более длинных. В этом случае сплошной поток двоичных разрядов однозначно декодируется, поскольку декодер обнаруживает вначале более короткие кодовые комбинации. Эффективные коды долгое время были чисто академическими, но в последнее время успешно используются при формировании баз данных, а также при сжатии информации в современных модемах и в программных архиваторах [39].
|
|
Ввиду неравномерности вводят среднюю длину кода. Средняя длина – математическое ожидание длины кода:
. | (2.22) |
Здесь – длина -той кодовой комбинации; – ее вероятность; – число различных комбинаций. Особенностью эффективных кодов является то, что средняя длина кода приближается к энтропии источника:
, | (2.23) |
причем, стремится к сверху (то есть ).
Выполнение условия (2.23) усиливается при увеличении .
Существует две разновидности эффективных кодов: Шеннона-Фано и Хафмана. Рассмотрим их получение на примере. Предположим, вероятности символов в последовательности имеют значения, приведенные в таблице 2.1.
Таблица 2.1
Вероятности символов
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
0,1 | 0,2 | 0,1 | 0,3 | 0,05 | 0,15 | 0,03 | 0,02 | 0,05 |
Символы ранжируются, то есть представляются в ряд по убыванию вероятностей. После этого по методу Шеннона-Фано периодически повторяется следующая процедура: вся группа событий делится на две подгруппы с одинаковыми (или примерно одинаковыми) суммарными вероятностями. Процедура продолжается до тех пор, пока в очередной подгруппе не останется один элемент, после чего этот элемент устраняется, а с оставшимися указанные действия продолжаются. Это происходит до тех пор, пока в последних двух подгруппах не останется по одному элементу. Продолжим рассмотрение нашего примера, которое сведено в таблице 2.2.
|
|
Таблица 2.2.
Кодирование по методу Шеннона-Фано
1 | 2 | 3 | 4 | 5 | |||
4 | 0,3 | I | 11 | ||||
2 | 0,2 | I | II | 10 | |||
6 | 0,15 | I | I | 011 | |||
3 | 0,1 | II | 010 | ||||
1 | 0,1 | I | I | 0011 | |||
9 | 0,05 | II | II | 0010 | |||
5 | 0,05 | II | I | 00001 | |||
7 | 0,03 | II | II | I | 000001 | ||
8 | 0,02 | II | 000000 |
Как видно из таблицы 2.2, первый символ с вероятностью участвовал в двух процедурах разбиения на группы и оба раза попадал в группу с номером I . В соответствии с этим он кодируется двухразрядным кодом II. Второй элемент на первом этапе разбиения принадлежал группе I, на втором – группе II. Поэтому его код 10. Коды остальных символов в дополнительных комментариях не нуждаются.
|
|
Обычно неравномерные коды изображают в виде кодовых деревьев. Кодовое дерево – это граф, указывающий разрешенные кодовые комбинации [24]. Предварительно задают направления ребер этого графа, как показано на рис.2.10 (выбор направлений произволен).
Рис. 2.10. Кодовое дерево для табл. 2.2
По графу ориентируются следующим образом: составляют маршрут для выделенного символа; количество разрядов для него равно количеству ребер в маршруте, а значение каждого разряда равно направлению соответствующего ребра. Маршрут составляется из исходной точки (на чертеже она помечена буквой А). Например, маршрут в вершину 5 состоит из пяти ребер, из которых все, кроме последнего, имеют направление 0; получаем код 00001.
Вычислим для этого примера энтропию и среднюю длину слова:
Как видно, средняя длина слова близка к энтропии.
Коды Хафмана.
Коды Хафмана строятся по иному алгоритму. Процедура кодирования состоит из двух этапов. На первом этапе последовательно проводят однократные сжатия алфавита. Однократное сжатие – замена двух последних символов (с низшими вероятностями) одним, с суммарной вероятностью. Сжатия проводят до тех пор, пока не останется два символа. При этом заполняют таблицу кодирования, в которой проставляют результирующие вероятности, а также изображают маршруты, по которым новые символы переходят на следующем этапе.
На втором этапе происходит собственно кодирование, которое начинается с последнего этапа: первому из двух символов присваивают код 1, второму – 0. После этого переходят на предыдущий этап. К символам, которые не участвовали в сжатии на этом этапе, приписывают коды с последующего этапа, а к двум последним символам дважды приписывают код символа, полученного после склеивания, и дописывают к коду верхнего символа 1, нижнего – 0. Если символ дальше в склеивании не участвует, его код остается неизменным. Процедура продолжается до конца (то есть до первого этапа).
Таблица 2.3.
Кодирование по алгоритму Хафмана
N | код | I | II | III | IV | V | VI | VII | |
4 | 0.3 | 11 | 0.3 11 | 0.3 11 | 0.3 11 | 0.3 11 | 0.3 11 | 0.4 0 | 0.6 1 |
2 | 0.2 | 01 | 0.2 01 | 0.2 01 | 0.2 01 | 0.2 01 | 0.3 10 | 0.3 11 | 0.4 0 |
6 | 0.15 | 101 | 0.15 101 | 0.15 101 | 0.15 101 | 0.2 00 | 0.2 01 | 0.3 10 | |
3 | 0.1 | 001 | 0.1 001 | 0.1 001 | 0.15 100 | 0.15 101 | 0.2 00 | ||
1 | 0.1 | 000 | 0.1 000 | 0.1 000 | 0.1 001 | 0.15 100 | |||
9 | 0.05 | 1000 | 0.05 1000 | 0.1 1001 | 0.1 000 | ||||
5 | 0.05 | 10011 | 0.05 10011 | 0.05 1000 | |||||
7 | 0.03 | 100101 | 0.05 10010 | ||||||
8 | 0.02 | 100100 |
В таблице 2.3 показано кодирование по алгоритму Хафмана. Как видно из таблицы, кодирование осуществлялось за семь этапов. Слева указаны вероятности символов, справа – промежуточные коды. Стрелками показаны перемещения вновь образованных символов. На каждом этапе два последних символа отличаются только младшим разрядом, что соответствует методике кодирования. Вычислим среднюю длину слова:
Недостатком кода Хафмана можно считать то, что нулевая кодовая комбинация не всегда соответствует наименее вероятному символу. Это может привести к потере этого символа при передаче нулей низкими уровнями.
Оба кода удовлетворяют требованию однозначности декодирования: как видно из таблиц, более короткие комбинации не являются началом более длинных кодов.
При увеличении количества символов эффективности кодов возрастают, поэтому в некоторых случаях кодируют более крупные блоки (например, если речь идет о текстах, можно кодировать некоторые наиболее часто встречающиеся слоги, слова и даже фразы).
Эффект от внедрения таких кодов определяется в сравнении их с равномерным кодом:
(2.24) |
где – количество разрядов равномерного кода, который заменяется эффективным.
Классический алгоритм Хафмана относится к двухпроходным, т. е. требует вначале набора статистики по символам и сообщениям, а потом описанных выше процедур. Это неудобно на практике, поскольку увеличивает время обработки сообщений и накопления словаря. Чаще используются однопроходные методы, в которых процедуры накопления и кодирования совмещаются. Такие методы называются ещё адаптивным сжатием по Хафману [48].
Сущность адаптивного сжатия по Хафману сводится к построению первоначального кодового дерева и последовательной его модификации после поступления каждого очередного символа. Как и прежде, деревья здесь бинарные, т. е. из каждой вершины графа – дерева исходит максимум две дуги. Принято называть исходную вершину родителем, а две связанных с ней следующих вершины – детьми. Введём понятие веса вершины – это количество символов (слов), соответствующих данной вершине, полученных при подаче исходной последовательности. Очевидно, что сумма весов детей равна весу родителя.
После введения очередного символа входной последовательности пересматривается кодовое дерево: пересчитываются веса вершин и при необходимости вершины переставляются. Правило перестановки вершин следующее: веса нижних вершин наименьшие, причём вершины, находящиеся слева на графе, имеют наименьшие веса.
Одновременно вершины нумеруются. Нумерация начинается с нижних (висячих, т. е. не имеющих детей) вершин слева направо, потом переносится на верхний уровень и т.д. до нумерации последней, исходной вершины. При этом достигается следующий результат: чем меньше вес вершины, тем меньше её номер.
Перестановка осуществляется в основном для висячих вершин. При перестановке должно учитываться сформулированное выше правило: вершины с большим весом имеют и больший номер.
После прохождения последовательности (она называется также контрольной или тестовой) всем висячим вершинам присваиваются кодовые комбинации. Правило присвоения кодов аналогично вышеизложенному: количество разрядов кода равно количеству вершин, через которые проходит маршрут от исходной до данной висячей вершины, а значение конкретного разряда соответствует направлению от родителя к «ребёнку» (скажем, переход влево от родителя соответствует значению 1, вправо – 0).
Полученные кодовые комбинации заносятся в память устройства сжатия вместе с их аналогами и образуют словарь. Использование алгоритма заключается в следующем. Сжимаемая последовательность символов разбивается на фрагменты в соответствии с имеющимся словарём, после чего каждый из фрагментов заменяется его кодом из словаря. Не обнаруженные в словаре фрагменты образуют новые висячие вершины, приобретают вес и также заносятся в словарь. Таким образом формируется адаптивный алгоритм пополнения словаря.
Для повышения эффективности метода желательно увеличивать размер словаря; в этом случае коэффициент сжатия повышается. Практически размер словаря составляет 4 – 16 килобайт памяти.
Проиллюстрируем приведённый алгоритм примером. На рис. 2.12 приведена исходная диаграмма (её называют также деревом Хафмана). Каждая вершина дерева показана прямоугольником, в котором вписаны через дробь две цифры: первая означает номер вершины, вторая – её вес. Как можно убедиться, соответствие весов вершин и их номеров выполняется.
Рис. 2.12. Исходное дерево кода Хафмана | Рис. 2.13. Изменение весов |
Предположим теперь, что символ, соответствующий вершине 1, в тестовой последовательности встретился вторично. Вес вершины изменился, как показано на рис. 2.13, вследствие чего правило нумерации вершин нарушено. На следующем этапе меняем расположение висячих вершин, для чего меняем местами вершины 1 и 4 и перенумеровываем все вершины дерева. Полученный граф приведён на рис. 2.14. Далее процедура продолжается аналогично.
Рис. 2.14. Перестановки в дереве Хафмана
Следует помнить, что каждая висячая вершина в дереве Хафмана соответствует определённому символу или их группе. Родитель отличается от детей тем, что группа символов, ему соответствующая, на один символ короче, чем у его детей, а эти дети различаются последним символом. Например, родителю соответствуют символы «кар»; тогда у детей могут быть последовательности «кара» и «карп».
Дата добавления: 2018-02-18; просмотров: 636; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!