NetNado
  Найти на сайте:

Учащимся

Учителям



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: BTree

end {Node}

Процедура SearchAndInsert – поиска и вставки элемента x в дерево b – в случае успешного поиска увеличивает счетчик Count в найденном узле, а в случае неудачного поиска добавляет лист в подходящее (т. е. с сохранением инварианта БДП) место дерева поиска.

procedure SearchAndInsert (x: Elem; var b: BTree);

begin

if b = nil then

begin

New (b);

with bdo

begin

Root := x; LSub := nil; RSub := nil

end {with}

end

else {b  nil}

with bdo

if x < Root then SearchAndInsert (x, LSub)

else if x > Root then SearchAndInsert (x, RSub)

else Count := Count + 1

{end with};

end {SearchAndInsert}

Пусть во входном файле f_inputfile of Elem находится последовательность элементов, по которой функции SearchAndInsert строит БДП:

b := nil;

while not Eof (f_input) do

begin

Read (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.

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