- •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 и т.д. Получим искомый оптимальный код.