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.
Количество шагов рассмотренных операций вставки, удаления и нахождения минимального элемента в случайном БДП в худшем случае равно высоте дерева. Зависимость высоты случайного БДП от количества узлов дерева рассмотрена далее.