Основы программирования. Динамические массивы. Списки. Ассоциативные массивы. Деревья. Хеш-таблицы - 38 стр.

UptoLike

Составители: 

40
мерно
nnkn
2
log . Ровно такая оценка была получена в алгоритме быстрой сор-
тировки; для произвольных данных улучшить эту оценку нельзя.
При выводе этой оценки мы исходили из того, что БДП является достаточно
сбалансированным. Это не всегда так. Например, при добавлении возрастающей
последовательности элементов каждый следующий элемент добавляется в правое
поддерево листа и дерево
вырождается в список:
3
8
12
99
...
Этосамый плохой случай: количество операций при вставке имеет порядок n, а
не
n
2
log , поэтому количество операций в алгоритме сортировки деревом состав-
ляет примерно
2
n .
Однако в среднем (если данные случайны и добавляются в случайном поряд-
ке) количество операций при сортировке деревом составляет примерно
nn
2
log
.
Отметим также, что мы получили компактный рекурсивный алгоритм сортировки
всего с одним циклом (!), совпадающий по оценке количества операций с одним
из самых производительных алгоритмов сортировкибыстрой сортировкой:
r:=nil;
for i:=1 to 10 do
Add(r);
InfixPrintTree(r);
Поиск элемента в БДП
Поиск в БДП осуществляется по той же схеме, что и добавление. Пусть
ищется элемент со
значением x. Если дерево пусто, то элемент не найден. Если
значение x совпадает со значением корневого элемента, то элемент найден. Если
значение x меньше значения корневого элемента, то рекурсивно ищем x в левом
поддереве, а если больше, то в правом поддереве. В случае успешного поиска бу-
дем возвращать указатель на
элемент, в противном случае будем возвращать nil:
function Search(x: DataType; r: PNode): PNode;
begin
if r=nil then
Result:=nil
else if r.data=x then
Result:=r
else if r.data<x then
Result:=Search(x,r.right)