- •1(18).Основное понятие теории графов. Определения и разновидности графов. Способы задания графов: аналитический, геометрический, матричный. Изоморфизм графов. Примеры.
- •2(19). Операции над графами с примерами.
- •3(20) Маршруты. Цепи. Циклы.
- •4(21) Метрические характеристики графа
- •5(22) Понятие сети. Матрица весов.
- •6(23) Алгоритм Беллмана-Мура (алгоритм корректировки меток)
- •7(24). Деревья и их свойства. Лес.
- •8(25). Задача об остове экстремального веса.
- •9(26) Эйлеровы графы и циклы. Алгоритм Флерн. Гальмитоновые графы и циклы
- •10(27) Планарные графы. Укладка графа. Теорема Эйлера. Теорема Понтрягина-Куратовского. Понятие искаженности и толщины непланарных графов
- •11(28) Алгоритм плоской укладки
- •2 Итерация
- •12(29). Раскраски графов
- •13(30)Потоки в сетях.
- •14(31) Потоки минимальной стоимости.
- •15(32)Элементы теории кодирования. Кодирование как способ представления информации.
- •16(33) Общий критерий взаимной однозначности. Теорема Маркова. Примеры
- •17(34) Неравенство Макмиллана.
- •18(35) Коды с минимальной избыточностью. Примеры.
- •19(36). Оптимальное кодирование Хаффмана. Решение задачи о построении кодов с минимальной избыточностью для двоичного кодирования.
- •20(37) Самокорректирующиеся коды. Коды Хэмминга. Алгоритм построения кода Хэмминга
- •21(38) Обнаружение ошибки в кодах Хемминга.
19(36). Оптимальное кодирование Хаффмана. Решение задачи о построении кодов с минимальной избыточностью для двоичного кодирования.
Def:
коды, определяемые схемой
,
наз кодами с минимальной избыточностью
или оптимальными кодами Хаффмана.
Очевидно,
что коды с минимальной избыточностью
дают в среднем минимальное увеличение
длины слов при соответственном
кодировании. Поэтому интересна задача
о построении кодов с минимальной
избыточностью Решим эту задачу для
двоичного кодирования, когда алфавит
В содержит 2 символа. В силу следствия
из теоремы Макмиллана существует
алфавитное кодирование со свойством
префикса, дающее коды с минимальной
избыточностью. При построении кодов с
минимальной избыточностью можно
ограничиться рассмотрением префиксных
кодов. Префиксный код удобно задавать
с помощью занумерованного ориентированного
дерева с корнем. В котором из каждой
вершины выходит не более, чем 2 дуги. В
каждую вершину, кроме корня, входит по
1 дуге. Каждой дуге дерева приписывается
0 или 1. Дугам, выходящим из одной вершины,
приписываются разные символы (0, 1). Такие
деревья будем называть кодовыми. Каждой
вершине V
сопоставляют слово из символов, приписан
дугам, составляющим путь Р(V).
Если вершинам V1
и
V2
приписаны двоичные слова
и
и
является префиксом слова
,
то путь из корня дерева в V2
проходит
через вершину V1.
Значит слова приписан концевыми вершинам
кодового дерева образуют префиксный
код. И наоборот, всякому префиксному
коду соответствует множество концевых
вершин некоторого кодового дерева.
Свойства оптимальных префиксных кодов.
Будем
считать, что символы
a1,a2,…,ar
алфавита
сообщений А занумерованы в порядке
убывания вероятности их появления.
Таким образом
В оптимальном коде длины li элементарных кодов не убывают.
Существует оптимальный код, в котором двум наименее вероятн символам ar-1 и ar соответствуют элементарные коды одинаковой длины, различающихся лишь в последнем разряде.
Предположим,
что источник сообщений S
выдает сообщения в алфавите А = {a1,a2,…,ar}
и
для вероятностей р1,р2,…,рr
появление символов a1,a2,…,ar
в сообщениях справедливо соотношение
.
Рассмотрим
источник S1,
полученный из S
отождествлением символов ar-1
и
ar
.
Он выдает символы
a1,a2,…,ar-2
с прежними вероятностями р1,р2,…,рr-2
, а новый символ а’
(склеенный)
с вероятностью р’=
рr-1
+
рr
, такой источник будем называть
редуцированным. Предположим, что для
редуцированного источника имеется
некоторый код {
,…,
,
}
по нему построим код для источника S
следующим образом: для символов
a1,a2,…,ar-2
сохраним прежние коды
,…,
.
А
в качестве
и
возьмем
соответственно слова
0
и
1.
Очевидно, что если код для редуцированного
источника S1
–
префиксный, то построен код и для
исходного источника, тоже префиксный.
(36)Теорема о редукции.
Если префиксный код { ,…, , } для редуцированного источника S1 является оптимальным, то и префиксный код { ,…, , 0, 1} для исходного источника S, построенный указанным способом, также является оптимальным.
Алгоритм построения оптимальных кодов.
Сначала производится свертывание искомого кода в соответствии с правилами перехода от источника S к редуцированному источнику S1. В процессе свертывания один за другим, получаются все более простые (короткие) коды. И в конце концов код из однобуквенных элементарных кодов. Это означает преобразование набора вероятностей до тех пор, пока не получится набор вероятностей (из 2 чисел), для которого оптимальный код находится тривиально. Затем найденный код развертывается в соответствии с теоремой о редукции. В последовательность оптимальных кодов, которой заканчивается искомый код. Этот алгоритм реализуется с помощью процедуры Хаффмана.
Пусть вероятности в распределении р= р1,р2,…,рr расположены в порядке убывания, т.е . Исключим из р вероятности рr-1 и рr , а их сумму р= рr-1 + рr вставим в оставшийся набор так, чтобы в получившемся новом наборе вероятности не возрастали. Повторяем эту процедуру пока не получим набор из 2 вероятностей. Для этого набора оптимальным является код, в котором букве алфавита А ставится в соответствие 0 или 1. Из полученного на некотором шаге оптимального кода S1 , в соответствии с теоремой о редукции, можно перейти к расширенному оптимальному коду S с мощностью на единицу больше мощности кода S1 и т.д. Получим искомый оптимальный код.
