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   2.3.Случайные бинарные деревья поиска
 Рассмотрим процедуру добавления элемента в БДП. Дополним запись, представляющую узел дерева, полем 
Count, в котором будем фиксировать повторные попытки вставки элемента в дерево:
Node = 
record  Info: 
Elem;
 Count: 
Word;
 LSub, 
RSub: 
BTreeend {
Node}
Процедура 
SearchAndInsert – поиска и вставки элемента 
x в дерево 
b – в случае успешного поиска увеличивает счетчик 
Count в найденном узле, а в случае неудачного поиска добавляет лист в подходящее (т. е. с сохранением инварианта БДП) место дерева поиска.
procedure SearchAndInsert (
x: 
Elem; 
var b: 
BTree);
begin if  b = 
nil then  begin  New (
b);
with b 
do  begin Root := 
x; 
LSub := 
nil; 
RSub := 
nilend {
with}
endelse {
b  
nil} 
with b 
do if x < 
Root  then SearchAndInsert (
x, 
LSub) 
else if x > 
Root then SearchAndInsert (
x, 
RSub)
else Count := 
Count + 1
{
end with};
end {
SearchAndInsert}
Пусть во входном файле 
f_
input: 
file of Elem находится последовательность элементов, по которой функции 
SearchAndInsert строит БДП:
b := 
nil;
while not Eof (
f_
input) 
dobeginRead (
f_
input, 
x); 
SearchAndInsert (
x, 
b)
end {
while}
БДП, построенное таким способом, называется 
случайным БДП. Структура этого дерева полностью зависит от того («случайного») порядка, в котором элементы расположены во входной последовательности (во входном файле). В качестве простейшего примера рассмотрим последовательность из четырёх элементов 
a, 
b, 
c, 
d. Имеется 4! = 24 перестановки из четырёх элементов и, следовательно, 24 варианта входной последовательности. На р

исунке *** изображены все 24 дерева, построенные процедурой 
SearchAndInsert.
В каждом узле в качестве нижнего индекса указан порядковый номер вставки элемента (его номер во входной последовательности). Видно, что некоторые деревья фактически совпадают, отличаясь только порядком построения (индексами у элементов). Например, совпадают два дерева, соответствующие перестановкам 
acbd и 
acdb. Среди идеально сбалансированных деревьев совпадений больше. В частности одинаковые деревья получаются для каждой из следующих троек перестановок: 1) 
bacd, 
bcad и 
bcda; 2) 
badc, 
bdac и 
bdca; 3) 
cabd, 
cadb и 
cdab; 4) 
cbad, 
cbda и 
cdba. Всего в этом примере 12 идеально сбалансированных деревьев. В случаях полностью упорядоченных входных перестановок 
abcd и 
dcba деревья фактически вырождаются в линейные списки и имеют максимальную высоту.
Легко убедиться, что в рассмотренном примере имеется 14 структурно различных бинарных деревьев (например, соответствующих перестановкам 
abcd, 
abdc, 
acbd, 
adbc, 
adcb, 
bacd, 
badc, 
cabd, 
cbad, 
dabc, 
dacb, 
dbac, 
dcab, 
dcba). В общем случае число 

 структурно различных бинарных деревьев с 
n узлами удовлетворяет рекуррентному уравнению 

с начальными условиями 

 Это рекуррентное уравнение с точностью до обозначений совпадает с рекуррентным уравнением, получающимся при подсчёте числа расстановки скобок в произведении 
n сомножителей (см. Приложение). Оказывается [Конкретная математика или Романовский И.В.], что решением этого рекуррентного уравнения являются так называемые 
числа Каталана Сn, т. е. 
bn = 
Сn. В Приложении приведена общая формула для чисел Каталана, асимптотическое соотношение 

 и несколько первых чисел Каталана, в том числе 
С4  = 14, что соответствует рассмотренному примеру.

Рассмотрим операцию поиска минимального элемента в БДП. Если в дереве 
b левое поддерево пусто, то минимальное значение находится в корне. Если же левое поддерево не пусто, то минимальное значение (см. рисунок) находится в самом левом элементе левого поддерева, который может быть найден после выполнения следующего цикла:
while b.
LSub ≠ 
nil do b := 
b.
LSubАналогичным образом находится максимальный (крайний правый) элемент БДП.
Удаление элемента из случайного БДП проще всего происходит, если этот элемент находится в листе дерева. Тогда этот лист непосредственно удаляется. Если же удаляемый элемент находится во внутреннем узле 
b, то в ситуации 
b.
RSub  ≠ 
nil находим минимальный элемент правого поддерева, рекурсивно удаляем его и заменяем им содержимое узла 
b. Этот процесс схематично показан на рисунке.

В ситуации 
b.
RSub  = 
nil (следовательно, 
b.
LSub  ≠ 
nil) находим максимальный элемент левого поддерева, рекурсивно удаляем его и заменяем им содержимое узла 
b.
Количество шагов рассмотренных операций вставки, удаления и нахождения минимального элемента в случайном БДП в худшем случае равно высоте дерева. Зависимость высоты случайного БДП от количества узлов дерева рассмотрена далее.