|
||||||||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Схема кодирования ФаноКодирование
Вопросы кодирования издавна играли заметную роль в математике. Например: 1. Десятичная позиционная система счисления — это способ кодирования натуральных чисел. Римские цифры — другой способ кодирования натуральных чисел, причем гораздо более наглядный и естественный: палец — I, пятерня — V, две пятерни — X. Однако при этом способе кодирования труднее выполнять арифметические операции над большими числами, поэтому он был вытеснен позиционной десятичной системой. 2. Декартовы координаты — способ кодирования геометрических объектов числами. 3. Составление текста программы часто и совершенно справедливо тоже называют кодированием. Ранее вопросы кодирования играли вспомогательную роль и не рассматривались как отдельный предмет математического аппарата, но с появлением средств связи и особенно компьютеров ситуация радикально изменилась. Кодирование буквально пронизывает информационные технологии и является одним из центральных вопросов при решении самых разных задач программирования и информационных процессов: - представление данных произвольной природы (например, чисел, текста, графики) в памяти компьютера; - защита информации от несанкционированного доступа; - обеспечение помехоустойчивости при передаче данных по каналам связи; - сжатие информации в базах данных. Не ограничивая общности, задачу кодирования можно сформулировать следующим образом. Пусть заданы алфавиты А = { a 1,..., an }, В = { b 1,…, bm } и функция F: S Если | В | = m, то F называется т-ичным кодированием. Наиболее распространенный случай В = {0,1} — двоичное кодирование. Именно этот случай рассматривается в последующих разделах; слово «двоичное» опускается. Типичная задача теории кодирования формулируется следующим образом: при заданных алфавитах А, В и множестве сообщений S найти такое кодирование F, которое обладает определенными свойствами (то есть удовлетворяет заданным ограничениям) и оптимально в некотором смысле. Критерий оптимальности, как правило, связан с минимизацией длин кодов. Свойства, которые требуются от кодирования, бывают самой разнообразной природы: - существование декодирования — это очень естественное свойство, однако даже оно требуется не всегда. Например, трансляция на ЭВМ программы на языке высокого уровня в машинные команды — это кодирование, для которого не требуется однозначного декодирования; - помехоустойчивость, или исправление ошибок: функция декодирования F - 1 обладает таким свойством, что - заданная сложность (или простота) кодирования и декодирования. Например, в криптографии изучаются такие способы кодирования, при которых имеется просто вычисляемая функция F, но определение функции F-1 требует очень сложных вычислений (см. раздел 6.5.). Большое значение для задач кодирования имеет природа множества сообщений S. При одних и тех же алфавитах А, В и требуемых свойствах кодирования f оптимальные решения могут кардинально отличаться для разных S. Для описания множества S (как правило, очень большого или бесконечного) применяются различные методы: -теоретико-множественное описание, например -вероятностное описание, например S = А*, и заданы вероятности р, появление букв в сообщении, -логико-комбинаторное описание, например, S задано порождающей формальной грамматикой. 6.1. Алфавитное кодирование Кодирование F может сопоставлять код всему сообщению из множества S как единому целому или же строить код сообщения из кодов его частей. Элементарной частью сообщения является одна буква алфавита А. Этот простейший случай рассматривается ниже. Пусть задано конечное множество А = { a1,..., an }, которое называется алфавитом. Элементы алфавита называются буквами. Последовательность букв называется словом (в данном алфавите). Множество слов в алфавите А обозначается А*. Если слово Пустое слово обозначается Если Алфавитное (или побуквенное) кодирование задается схемой (или таблицей кодов) Множество кодов букв V: ={ Пример 6.1. Рассмотрим алфавиты A ={0,1,2,3,4,5,6,7,8,9}, В: ={0,1} и схему
Эта схема однозначна, но кодирование не является взаимно однозначным: а значит, невозможно декодирование. С другой стороны, схема известная под названием «двоично-десятичное кодирование», допускает однозначное декодирование. Рассмотрим схему алфавитного кодирования то есть любое слово, составленное из элементарных кодов, единственным образом разлагается на элементарные коды. Алфавитное кодирование с разделимой схемой допускает декодирование. Если таблица кодов содержит одинаковые элементарные коды, то есть, если где Схема Теорема 6.1. Префиксная схема является разделимой. Доказательство. От противного. Пусть кодирование со схемой
Поскольку Пример 6.2. Разделимая, но не префиксная схема: А = { а,b }, В = {0, 1}, S = { а Чтобы схема алфавитного кодирования была разделимая, необходимо, чтобы длины элементарных кодов удовлетворяли определенному соотношению, известному как неравенство Макмиллана. Теорема 6.2. Если схема Доказательство. Обозначим Раскрывая скобки, имеем сумму
где
Каждому слагаемому вида Таким образом, v(n,t) — это число некоторых слов вида Следовательно, что и требовалось доказать. Неравенство Макмиллана является не только необходимым, но и в некотором смысле достаточным условием разделимости схемы алфавитного кодирования. Теорема 6.3. Если числа то существует разделимая схема алфавитного кодирования
Доказательство. Без ограничений общности можно считать, что Тогда неравенство Макмиллана можно записать так: Из этого неравенства следуют m неравенств для частичных сумм:
Рассмотрим слова длины Пример 6.3. Азбука Морзе — это схема алфавитного кодирования:
где по историческим и техническим причинам 0 называется точкой и обозначается знаком «•», а 1 называется тире и обозначается знаком «—». Имеем: 1/4 + 1/16 + 1/16 + 1/8 + 1/2 + 1/16 + 1/8 + 1/16 + 1/4 + 1/16 + + 1/8 + 1/16 + 1/4 + 1/4 + 1/8 + 1/16 + 1/16 + 1/8 + 1/8 + + 1/2 + 1/8 + 1/16 + 1/8 + 1/16 + 1/16 + 1/16 = = 2/2 + 4/4 + 7/8 + 12/16 = 3 + 5/8 > 1. Таким образом, неравенство Макмиллана для азбуки Морзе не выполнено, и эта схема не является разделимой. На самом деле в азбуке Морзе имеются дополнительные элементы — паузы между буквами (и словами), которые позволяют декодировать сообщения. Эти дополнительные элементы определены неформально, поэтому прием и передача сообщений с помощью азбуки Морзе, особенно с высокой скоростью, является некоторым искусством, а не простой технической процедурой. 6.2. Кодирование с минимальной избыточностью Для практики важно, чтобы коды сообщений имели по возможности наименьшую длину. Алфавитное кодирование пригодно для любых сообщений, то есть S = А*. Если больше про множество S ничего не известно, то точно сформулировать задачу оптимизации затруднительно. Однако на практике часто доступна дополнительная информация. Например, для текстов на естественных языках известно распределение вероятности появления букв в сообщении. Использование такой информации позволяет строго поставить и решить задачу построения оптимального алфавитного кодирования. Если задана разделимая схема алфавитного кодирования Если заданы конкретное сообщение и конкретная схема кодирования, то нетрудно подобрать такую перестановку элементарных кодов, при которой длина кода сообщения будет минимальна. Пусть Отсюда вытекает алгоритм назначения элементарных кодов, при котором длина кода конкретного сообщения S будет минимальна: нужно отсортировать буквы в порядке убывания количества вхождений, элементарные коды отсортировать в порядке возрастания длины и назначить коды буквам в этом порядке. Следует заметить, что этот простой метод решает задачу минимизации длины кода только для фиксированного сообщения S и фиксированной схемы Пусть заданы алфавит А == Для каждой (разделимой) схемы
и называется средней ценой (или длиной) кодирования Пример 6.4. Для разделимой схемы А = {а, b }, В = {0,1}, Обозначим
Очевидно, что всегда существует разделимая схема Алфавитное (разделимое) кодирование Схема кодирования Фано Данный алгоритм строит разделимую префиксную схему алфавитного кодирования, близкого к оптимальному. Он основан на теореме Шеннона о том, что сообщения, составленные из букв некоторого алфавита, можно закодировать так, что среднее число символов на букву будет сколь угодно близко к энтропии Н (меры неопределенности, определяющей количество информации в сообщении) источника сообщений, но не меньше этой величины:
где z i – символ алфавита, а p(z i ) – вероятность его появления в сообщении. В алгоритме полагается, что известна длина алфавита n
Сначала все символы разделяются на две группы так, чтобы суммарная вероятность одной и другой групп были очень близкими. В первой группе первый символ кода устанавливаем равным 0, во второй – 1. Каждая из полученных подгрупп в свою очередь разбивается на две подгруппы с одинаковыми (или почти одинаковыми) вероятностями. Верхней подгруппе приписываем справа 0, а нижней –1 и т.д. Процесс повторяем пока в каждой подгруппе не останется по одной букве. Для повторяющейся процедуры отыскания индекса, при котором суммарные вероятности подгрупп близки (назовем его медианой), структура алгоритма может иметь следующий вид. Входная информация: массив вероятностей
Назовем процедуру Шаг 1. Полагаем Шаг 2. Находим в цикле сумму Шаг 3. Полагаем Шаг 4. Полгаем Шаг 5. Проверка. Если Вторая повторяющаяся процедура – построение k+1 –го символа в коде (k=1,2,…,L). На входе в процедуру имеем индексы начала и конца обрабатываемой группы, k – длина уже построенных кодов в обрабатываемой части массива кодов С, который является массивом размером n ´ L и CijÎ{0,1}. Выходом является полностью построенный массив С. Предлагаемый алгоритм носит рекурсивный характер, и обращение к нему обозначим Шаг 1. Проверка на окончание. Если if = i0, то работа алгоритма окончена, и двумерный массив С сформирован. Идти к шагу 6. Иначе перейти к шагу 2. Шаг 2. Подготовка очередного разряда в коде. Полагаем k=k+1. Находим медиану Шаг 3. Формируем матрицу С.
1, если i Î[ m+1,if ]. Шаг 4. Обработка верхней части группы Шаг 5. Обработка нижней части группы Шаг 6. Останов. Тогда основной алгоритм состоит из ввода упорядоченного массива Обоснование. При каждом удлинении кодов в одной части коды удлиняются нулями, а в другой — единицами. Таким образом, коды одной части не могут быть префиксами другой. Удлинение кода заканчивается тогда и только тогда, когда длина части равна 1, то есть остается единственный код. Таким образом, схема по построению префиксная, а потому разделимая. Пример 6.5. Коды, построенные алгоритмом Фано для заданного распределения вероятностей (n =7).
Наибольший эффект сжатия сообщения получается в случае, когда вероятности букв представляют собой целочисленные отрицательные степени двойки. Среднее число символов на букву в этом случае точно равно энтропии. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.021 сек.) |