1. /_Методички/Мультимедиа-системы. Архитектура, стандарты, алгоритмы.pdf 2. /_Методички/Организация ЭВМ 2006.doc 3. /_Методички/Основы сетевых технологий.djvu 4. /_Методички/Программирование/Биные Деревья Поиска/2_01БДПоиска.doc 5. /_Методички/Программирование/Биные Деревья Поиска/2_02БинДП.doc 6. /_Методички/Программирование/Биные Деревья Поиска/2_03СлучайБДП.doc 7. /_Методички/Программирование/Деревья Хаффмана/1.doc 8. /_Методички/Программирование/Деревья Хаффмана/1_1ДХафф.doc 9. /_Методички/Программирование/Деревья Хаффмана/1_2_3_ДХафф.doc 10. /_Методички/Программирование/Деревья Хаффмана/1_4_ДХафф.doc 11. /_Методички/Программирование/Деревья Хаффмана/1_5_ДХафф.doc 12. /_Методички/Программирование/Деревья Хаффмана/1_6_7_ДХафф.doc 13. /_Методички/Программирование/Деревья Хаффмана/1_8ДХафф.doc 14. /_Методички/Программирование/Деревья Хаффмана/1_9ДХафф.doc 15. /_Методички/Программирование/Деревья Хаффмана/ДерХафф full.doc 16. /_Методички/Программирование/Деревья Хаффмана/КарлКлара.doc 17. /_Методички/Программирование/Деревья Хаффмана/Кодируется текст АБРАКАДАБРА.doc 18. /_Методички/Программирование/Динамические СД/00Титул.rtf 19. /_Методички/Программирование/Динамические СД/0Введение.rtf 20. /_Методички/Программирование/Динамические СД/1Списки.doc 21. /_Методички/Программирование/Динамические СД/2СтекОчДек1.rtf 22. /_Методички/Программирование/Динамические СД/3Деревья.rtf 23. /_Методички/Программирование/Динамические СД/4прим_лит.rtf 24. /_Методички/Программирование/Динамические СД/5оглавление.doc 25. /_Методички/Программирование/Динамические СД/Динамическое программирование - Задача о перемножении матриц.doc 26. /_Методички/Программирование/Пособие по разработке корректных программ/00Титул1_3.doc 27. /_Методички/Программирование/Пособие по разработке корректных программ/01Введение.rtf 28. /_Методички/Программирование/Пособие по разработке корректных программ/1АлгоритмЕвклида.doc 29. /_Методички/Программирование/Пособие по разработке корректных программ/2ОсновыАналитВерифПрогРовно.doc 30. /_Методички/Программирование/Пособие по разработке корректных программ/3ИндуктФункции.doc 31. /_Методички/Программирование/Пособие по разработке корректных программ/4Массивы.doc 32. /_Методички/Программирование/Пособие по разработке корректных программ/5Поиск.doc 33. /_Методички/Программирование/Пособие по разработке корректных программ/ОглавФонар.doc 34. /_Методички/Программирование/Пособие по разработке корректных программ/СписЛит&УслОбознач.doc 35. /_Методички/Сетевые технологии.pdf 36. /_Методички/Средства моделирования вычислительных сетей.pdf 37. /_Методички/Управление вычислительными сетями.pdf | Учебное пособие Редактор А. В. Крейцер Издательство спбгэту «лэти» 1 97376, С. Петербург, ул. Проф. Попова, 5 2. Деревья поиска Идеально сбалансированные бинарные деревья 2 Случайные бинарные деревья поиска Абракадабра!, содержащий 12 символов, включая специальный символ ! Задача кодирования сообщений. Префиксные коды и деревья Пусть задан алфавит 1 Код Фано-Шеннона 1 Метод Хаффмана 1 Реализация алгоритмов кодирования 1 Доказательство оптимальности кода Хаффмана Лемма 1 1 Энтропийная оценка средней длины кода 1 Динамическое кодирование по Хаффману Абракадабра!, содержащий 12 символов, включая специальный символ ! Абракадабра!, содержащий 12 символов, включая специальный символ ! А. Ю. Алексеев с. А. Ивановский д. В. Куликов При обучении программированию особую трудность вызывает работа с динамическими структурами данных 2. стеки и очереди спецификация стека и очереди 3 Определения дерева, леса, бинарного дерева. Скобочное представление Примечания и библиографические указания Списки Задача о порядке перемножения матриц С. А. Ивановский разработкакорректныхпрограм м санкт-Петербург 2003 Программирования Разработка, доказательство корректности и анализ алгоритма 2. основы аналитической верификации программ основные правила аналитической верификации программ 3. индуктивные функции на последовательностях 4. корректность программ при работе с массивами 5. поиск в массиве линейный поиск Разработка, доказательство корректности Шень А. Программирование: теоремы и задачи: Учеб пособие
  | 
скачать doc 1.4. Метод ХаффманаЭлегантное решение (алгоритм) для задачи построения оптимального префиксного кода нашел Д.Хаффман (D.A. Haffman). Дадим описание этого алгоритма в рекурсивной форме. 
Обозначим 
Wn = (
wi)
1n. Пусть набор 
Wn  упорядочен:
w1  
w2  … 
wn  1  
wn.
Если 
n = 2, то завершаем процесс кодирования, приписав сообщению с весом 
w1  код 1, а сообщению с весом 
w2  – код 0. Иначе (т. е. при 
n  2) выполняем следующие действия:
 
Из минимальных весов wn  1  и  wn образуем 
.
Из набора Wn исключаем элементы wn  1  и  wn и добавляем в него новый элемент 
. Полученный набор обозначим 
.
Решаем таким же способом задачу с набором весов 
, а затем в полученном решении заменяем узел (лист) 
 на поддерево из двух листьев wn  1  и  wn, приписав им коды 1 и 0, соответственно. 
 Ясно, что набор весов изменится ровно 
n – 1 раз, и алгоритм содержит 
n – 1 шаг, что легко записать и в итеративном виде (см. далее 1.5).
В алгоритме Хаффмана дерево строится «снизу вверх». Узлы с наименьшими весами 
wn  1  и  
wn образуют поддерево, которое заменяется на узел 

, который в свою очередь далее в нужный момент участвует в подобном объединении. Схематично это можно изобразить так:

Доказательство оптимальности кода Хаффмана будет дано далее в 1.6.
Пример 1. Пусть дано (тот же пример, что и в 1.1)
   Работу алгоритма схематично изобразим следующим образом
3(А), 2(Б), 
1(В), 1(Г)3(А), 
2(Б), 2(ВГ)4(БВГ), 3(А)7(АБВГ)
З

десь пара объединяемых на данном шаге «символов» подчеркнута. Результат замены узлов 
wn  1  и  
wn на узел 

 отображается на следующей строке. Фактически эта запись представляет в перевернутом виде дерево
Код получился таким же, как и в 1.1.
Пример 2. Пусть дано (тот же пример, что и в 1.2)
           wi
  |    8
  |    3
  |    3
  |    3
  |    3
  |  
    i
  |    А
  |    Б
  |    В
  |    Г
  |    Д
  |  
 
  Алгоритм Хаффмана по шагам даёт следующее.
8(А), 3(Б), 3(В), 
3(Г), 3(Д)8(А), 6(ГД), 
3(Б), 3(В)8(А), 
6(ГД), 6(БВ)12(БВГД), 8(А)20(АБВГД)

Получаем дерево Хаффмана
Полученный код есть
           wi
  |    8
  |    3
  |    3
  |    3
  |    3
  |  
    i
  |    А
  |    Б
  |    В
  |    Г
  |    Д
  |  
    ci
  |    0
  |    100
  |    101
  |    110
  |    111
  |  
 
  Это тот же код, который приводился в 1.2 как альтернатива коду Фано-Шеннона. Для него в 1.2 было получено 
L = 44 бита, и это оптимальный код. 
Пример 3. Пусть дано 
           wi
  |    6
  |    4
  |    3
  |    2
  |    1
  |  
    i
  |    А
  |    Б
  |    В
  |    Г
  |    Д
  |  
 
   Вариант 1. Алгоритм Хаффмана по шагам даёт следующее.
6(А), 4(Б), 3(В), 
2(Г), 1(Д)6(А), 4(Б), 
3(В), 3(ГД) 6(А), 
6(ВГД), 4(Б)10(БВГД), 6(А)16(АБВГД)
Получаем дерево Хаффмана

и код
           wi
  |    6
  |    4
  |    3
  |    2
  |    1
  |  
    i
  |    А
  |    Б
  |    В
  |    Г
  |    Д
  |  
    ci
  |    0
  |    10
  |    110
  |    1111
  |    1110
  |  
 
  Полная длина кода есть 
L = 61+42+33+4(2+1) = 35 бит.
 Вариант 2. Отличие на третьем шаге. 
6(А), 4(Б), 3(В), 
2(Г), 1(Д)6(А), 4(Б), 
3(В), 3(ГД) 6(ВГД), 
6(А), 4(Б)10(АБ), 6(ВГД)16(АБВГД)

Получаем другое дерево Хаффмана
и код
           wi
  |    6
  |    4
  |    3
  |    2
  |    1
  |  
    i
  |    А
  |    Б
  |    В
  |    Г
  |    Д
  |  
    ci
  |    11
  |    10
  |    00
  |    011
  |    010
  |  
 
  Полная длина кода есть 
L = 2(6+4+3)+3(2+1) = 35 бит.
Сравнивая варианты 1 и 2, видим, что полная длина кода 
L  в них одинакова, но коды разные. Более того, максимальная длина кодового слова для варианта 1 равна 4, а для варианта 2 равна 3. Неоднозначность возникает при наличии нескольких кандидатов с равным весом для объединения узлов. Если в случае равных весов при объединении узлов раньше использовать те из них, которые были получены раньше (в частности листья), то, оказывается [*], что получим дерево (код) с минимальным значением высоты (длины кодового слова) 

 среди всех деревьев (кодов), которые минимизируют 
L = 
i=1..n wi li .