Решение:
1. Посчитаю количество символов в данном сообщении Q = 53
2. Найду частоты появления (вероятности) символов и занесу их в таблицу 1.
Таблица 1.
Таблица частот появления символов
| С | а | м | р | с | к | и | й | г | |
|
|
|
|
|
|
|
|
|
|
| о | у | д | т | в | е | н | ы | э | ч |
|
|
|
|
|
|
|
|
|
|
3. Кодируемые знаки расположу в порядке убывания их вероятностей (рi)
4. На каждом шаге две последние позиции списка (жирным шрифтом) суммирую и заменяю одной (выделенной цветом), которой приписываю данный результат сложения. Далее вновь сортирую список вероятностей, при этом сохраняю информацию о том, какие именно символы объединялись на каждом этапе. Процесс продолжаю до тех пор, пока не останется единственная позиция, вероятность которой равна 1.
Таблица 2.
Алгоритм Хаффмана
| Знаки | Pi | Вспомогательные столбцы | |||||||
| с |
|
|
|
|
|
|
|
|
|
| и |
|
|
|
|
|
|
|
|
|
| а |
|
|
|
|
|
|
|
|
|
| р |
|
|
|
|
|
|
|
|
|
| е |
|
|
|
|
|
|
|
|
|
| к |
|
|
|
|
|
|
|
|
|
| й |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
| о |
|
|
|
|
|
|
|
|
|
| т |
|
|
|
|
|
|
|
|
|
| н |
|
|
|
|
|
|
|
|
|
| м |
|
|
|
|
|
|
|
|
|
| у |
|
|
|
|
|
|
|
| |
| в |
|
|
|
|
|
|
| ||
| С |
|
|
|
|
|
| |||
| г |
|
|
|
|
| ||||
| д |
|
|
|
| |||||
| ы |
|
|
| ||||||
| э |
|
| |||||||
| ч |
|
| Вспомогательные столбцы | ||||||||||
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
| ||
|
|
|
|
|
|
|
| |||
|
|
|
|
|
|
| ||||
|
|
|
|
|
| |||||
|
|
|
|
| ||||||
|
|
|
| |||||||
|
|
| ||||||||
|
| |||||||||
|
5. Строю кодовое дерево. Корню дерева ставлю узел, вероятность которого равна 1. Затем каждому узлу приписываю два потомка с вероятностями, которые участвовали в образовании значения вероятности этого узла.
6. Данный процесс продолжаю до достижения узлов, соответствующих вероятностям исходных знаков.
Одной из ветвей, выходящей из каждого узла, например, с меньшей вероятностью, ставлю в соответствие символ 0, а с большей — 1. Спускаюсь от корня к нужному символу и, тем самым, получаю код этого символа.
Таким образом, получаю кодовое дерево (см. Приложение 1).
Составлю таблицу соответствия символов с полученным кодом Хаффмана:
Таблица 3.
Таблица соответствия символов с полученным кодом Хаффмана
| Символ | Вероятность | Код Хаффмана | Символ | Вероятность | Код Хаффмана |
| С |
| н |
| ||
| и |
| м |
| ||
| а |
| у |
| ||
| р |
| в |
| ||
| е |
| С |
| ||
| к |
| г |
| ||
| й |
| д |
| ||
| ы |
| |||
| о |
| э |
| ||
| т |
| ч |
|
Чтобы убедиться в том, что исходное сообщение сжалось, сравню объемы данного сообщения, закодированного с помощью ASCII-кодов и закодированного с помощью алгоритма Хаффмана.
Рассчитаю объем сообщения после кодирования кодом Хаффмана: суммирую произведение частоты встречаемости символа и количества 0 и 1 соответствующее этому символу по коду Хаффмана.
I1=6*3+5*3+4*4+4*4+4*4+3*4+3*4+3*4+3*4+3*4+3*4+2*5+2*5+2*5+1*6+1*6+1*6+1*6+1*6+1*6 = 18+15+48+72+30+36 = 219 бит
Сообщение в памяти компьютера закодировано с помощью ASCII-кодов, каждый символ весит 8 бит. Значит, объем исходного сообщения найду по формуле:
I = K*i,
где: K — количество символов в сообщении,
i — вес одного символа в битах,
I — информационный объем данного сообщения.
В моей задаче K = 53, i = 8 бит, значит, I2 = 8*53 = 424 бит
Коэффициент сжатия:
k = I2/I1

k= 
Ответ: закодированное данное сообщение методом Хаффмана выглядит так: 110001101111101101110101000011000001001011100000100100111001100111011101010001111111111010110011011001000100101101111110110100100001101001001110100011110011011000011000001001011110001100001111111011010100000011111010111
Декодирование
Рассмотрю на следующем примере, как происходит процесс декодирования.
Задача № 2. Дано дерево Хаффмана (см. Приложение 2) и битовая последовательность (закодированное сообщение):
Получить исходное сообщение (раскодировать).
Решение:
Для получения текста по этой последовательности многократно повторяю траверс от корня к листьям, перемещаясь в левое поддерево, если встречен 1, и в правое поддерево, если 0. Каждый раз по достижению листа символ в нём добавляю в полученный текст и снова начинаю процедуру от корня, продолжая просмотр последовательности с того же места.
Ответ: Математика — царица всех наук.
Заключение
В работе я рассмотрела основные понятия теории графов, виды графов. Описала алгоритм Хаффмана, метод сжатия информации, кодирования и декодирования.
Применяя теорию графов и используя алгоритм Хаффмана, закодировала и декодировала информацию, построив кодовое дерево.
С помощью графов решать задачи очень удобно, интересно, увлекательно. Теория графов обеспечивает эффективное сжатие информации.


Список литературы:
1.Березина Л.Ю. Графы и их применение. М.: Просвещение, 1979. — 143 с. с ил.
2.Додонова Л.Н. Конспект лекций по дисциплине «Теория конечных графов и ее применения». Самара, 2010. — С. 52.
3.Камерон П., ван Линт Дж. Теория графов, теория кодирования и блок-схемы М.: Наука, 1980, — 140 стр.
4.Фурсов В.А. Лекции по теории информации: Учебное пособие под редакцией Н.А. Кузнецова. Самара: Издательство Самар. гос. аэрокосм. ун-та, 2006. — 148 с.: ил.
Пожалуйста, не забудьте правильно оформить цитату:
Васильева М.В. ПРИМЕНЕНИЕ ТЕОРИИ ГРАФОВ В КОДИРОВАНИИ И ДЕКОДИРОВАНИИ ИНФОРМАЦИИ // Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ: сб. ст. по мат. XXIX междунар. студ. науч.-практ. конф. № 2(28). URL: http://sibac.info/archive/technic/2(28).pdf (дата обращения: 03.09.2017)






