Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Эффективное кодирование Алгоритм ХаффменаАлгоритм Хаффмена предполагает построение «кодового дерева». 1. Располагаем символы сообщения в порядке убывания вероятностей. 2. Объединяем два наименее вероятных сообщения в одно с суммарной вероятностью появления (т.е. складываем вероятности объединяемых сообщений). 3. Вновь располагаем сообщения в порядке убывания вероятностей и т.д., пока не получим сумму вероятностей, равную единице. Очевидно, количество подобных итераций равна n - 1, где n - количество символов в алфавите источника. «Кодовое дерево» для нашего примера представлено на рис. 2. Алгоритм кодирования новым двоичным кодом следующий: -идём от корней кодового дерева к вершине (справа – налево), -если в узле мы идём вверх, то в кодовую комбинацию записывается единица, если вниз — ноль. В результате получим после первого от корня узла: дибит D0 кодируется одной двоичной единицей 0, а объединение дибитов D1, D2 и D3 кодируется 1. После второго разветвления дибит D1 кодируется 10, а объединение дибитов D2 и D3 - 11. Окончательный результат дает третий узел. D2 кодируется как 111, а D3 - 110. Таким образом имеем D0 => "0"; D1 => "10"; D2 => "111"; D3 => "110".
Рис. Кодовое дерево алгоритма Хаффмена
В результате кодирования получен неравномерный код. Наиболее вероятный дибит D0 кодируется кодом минимальной длины, а наименее вероятные дибиты D2 и D3 - имеют коды максимальной длины. Поэтому средняя длина комбинации кода Хаффмена равна 0.46×1 + 0.22×2 + 0.20×3 + 0.12×3 = 1.86 бит и приближается к энтропии исходного кода Н2 = 1.827 дв. ед./дибит, что уменьшает длину и время передачи всего сообщения. Исходное сообщение содержало 100 дв. ед. После кодирования передаваемое сообщение
10.0.0.0.111.0.0.0.110.10.10.110.0.0.111.10.111.0.111.0.111. 111.111.0.0.10.0.0.111.110.10.0.0.0.111.0.0.0.110.10.10.110. 0.0.111.10.0.10.10.110
содержит всего 23×1 + 11×2 + 10×3 + 6×3 = 93 дв. ед., на 7 дв. ед. меньше исходного. Код Хаффмана обладает префиксными свойствами, т.е. никакая короткая кодовая комбинация не должна являться началом более длинной комбинации. При этом не нужно использовать дополнительные разделительные символы. Однако возникают и проблемы. Если произойдет ошибка при передаче информации, то нарушается разбиение кодовых комбинаций и возникает несколько ошибок при декодировании. Так, например, пусть десятый и двадцатый символы передаваемой последовательности приняты неверно (эти символы подчеркнуты) 10.0.0.0.111.0. 1. 0.110.10.10.1 0 0.0.0.111.10.111.0.111.0.111. 111.111.0.0.10.0.0.111.110.10.0.0.0.111.0.0.0.110.10.10.110. 0.0.111.10.0.10.10.110. После декодирования кода Хаффмена получим последовательность дибитов 01.00.00.00.10.00.0 1. 11. 0 1.01.01. 00. 00.00.10.01.10.00.10.00.10. 10.10.00.00.01.00.00.10.11.01.00.00.00.10.00.00.00.11.01.01.11.00.00.10.01.00.01.01.11. Сравнение с переданной последовательностью 01.00.00.00.10.00.00.00.11.01.01.11.00.00.10.01.10.00.10.00.10.10.10.00.00.01.00.00.10.11.01.00.00.00.10.00.00.00.11.01.01.11.00.00.10.01.00.01.01.11. показывает, что даже одиночные ошибки приводят к появлению пакетов ошибок при декодировании эффективного кода, которые выделены жирным шрифтом и подчеркнуты. Декодированная последовательность букв будет иметь вид И В Г Х И В М И Х А И Л И В А Н О В И Ч вместо переданной И В А Н О В М И Х А И Л И В А Н О В И Ч, т.е. три буквы приняты неверно. Для исключения ошибок следует применить специальные методы защиты – помехоустойчивое кодирование, которое позволяет обнаруживать и даже исправлять ошибки, вызванные действием помех в системе связи или обработки информации.
|