
- •Линейные списки
- •Стеки, очереди, деки
- •Представление стека в непрерывной памяти (в виде массива)
- •Представление стека в связанной памяти (в виде односвязного списка)
- •Очереди
- •Представление очереди в непрерывной памяти (в виде массива)
- •Представление очереди в связанной памяти (в виде односвязного списка)
- •Оценка затрат на поиск элемента
- •Деревья
- •Бинарные деревья
- •Сбалансированные и идеально сбалансированные деревья. Деревья поиска
Оценка затрат на поиск элемента
Определим число ссылок, которые необходимо пройти при поиске конкретного узла в списке (все значения узлов ищутся с одинаковой вероятностью).
НЕУПОРЯДОЧЕННЫЙ СПИСОК (N узлов)
рис. 17. Неупорядоченный список
Длина пути |
Минимальная |
Максимальная |
Средняя |
Удачный поиск |
|
|
|
Неудачный поиск |
|
|
|
УПОРЯДОЧЕННЫЙ СПИСОК (N узлов)
рис. 18. Упорядоченный список
Длина пути |
Минимальная |
Максимальная |
Средняя |
Удачный поиск |
|
|
|
Неудачный поиск |
|
|
|
КАК УСКОРИТЬ ПОИСК?
Разбить список на несколько подсписков (см. тему “Хеширование”)
По аналогии с алгоритмом поиска делением пополам в массиве, можно построить ссылочную структуру, в которой хранимые значения упорядочены (по возрастанию или убыванию), а поиск начинается со среднего элемента (рис. 19-21). В случае неудачи рассматривается левая (правая) часть структуры относительно текущего элемента, выбирается ее средний элемент и т.п. Поиск завершается, если ссылка равна Nil.
-
рис. 19. Упорядоченный двусвязный список
рис. 20. Узлы списка с измененными полями-ссылками
рис. 21. Бинарное дерево
Полученная структура называется деревом (рис. 21). Данное дерево является бинарным (каждый узел содержит 2 поддерева), идеально сбалансированным и деревом поиска (см. распечатку “Деревья”).
Пусть N - число узлов дерева, d - степень дерева (максимальное число поддеревьев для узлов дерева, в примере d=2), h – его высота (максимальное число ссылок, которое надо пройти, двигаясь к наиболее удаленному элементу). Тогда максимальное число узлов N, содержащихся в дереве, высотой h и степени d будет равно:
Для бинарного дерева
(d=2):
,
отсюда
В данном случае высота вершины h соответствует числу просмотренных ключей. Отсюда:
Минимальная длина пути при поиске в дереве = 1 (значение в корне)
Максимальная длина пути при поиске в дереве находится в диапазоне от
(дерево идеально сбалансировано, рис. 21) доN (дерево вырождается в линейный список)
Средняя длина пути:
(вывод формулы - факультативно)
(см. 681.3 К53 Кнут Д. Искусство Программирования. Т.3. Сортировка и поиск. - М. Вильямс, 2003, стр. 446)
ТЕМА. ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ. ДЕРЕВЬЯ. ВОПРОСЫ 4,5
Дословное цитирование распечатки на ГОСах не приветствуется
Следующими цветами помечено:
То, что не требуется к ГОСам
То, что пригодится при ответе
Комментарии и ссылки на книгу Н.Вирт "Алгоритмы и структуры данных"- СПб "Невский диалект", 2001 г.
CМ. ТАКЖЕ:
681.3 В52 Вирт Н. Алгоритмы и структуры данных.
004 М27 Марковский М.В., Панферов В.В. Структуры данных (деревья): Конспект лекций. М.:МИФИ, 2003.
Деревья
Дерево - пустая структура либо узел типа T, с которым связано конечное число древовидных структур (поддеревьев) с базовым типом T.
или
Дерево- конечное множествоS, состоящее из одного или более узлов, которое обладает следующими свойствами:
в множестве содержится один помеченный узел - корень (Root);
все остальные узлы множества содержатся в mнепересекающихся подмножествах
,
,...
(m>=0), каждое из которых также является деревом.
a)
|
b)
c) (a(b,c(d,e(g,h,k),f))) |
Рис. 1. Формы представления деревьев: a) в виде графа, b) с помощью вложенных множеств, c) с помощью вложенных скобок. |
ОПИСАНИЕ
TYPE
Tree=^Node
Node=record
Key: Char; {информационное поле записи - любого типа}
t1[,t2[,…[,tm]…]]: Tree; {поля-ссылки на поддеревья}
End;
ОСНОВНЫЕ ОПРЕДЕЛЕНИЯ:
[Непосредственный] Потомок
Узел Y, находящийся непосредственно под узлом X (рис.1: узлы b, c - потомки узла a)
[Непосредственный] Предок
Узел X, находящийся непосредственно над узлом Y (рис.1: узел a - предок узлов b и c)
Степень узла
Число непосредственных потомков (поддеревьев) для данного узла
(рис.1: степень узла a равна 2, узла b - 0, узла c - 3).
Степень дерева
Максимальное значение степени узла в дереве (рис.1: степень дерева =3).
Лист
Узел дерева, не имеющий потомков (узел со степенью = 0) (рис.1- листья b, d, f, g, h, k)
Внутренний узел (развилка дерева)
Узел дерева, имеющий потомков (узел, степень которого больше 0) (рис.1- внутренние узлы a, c, e).
Длина пути к вершине X
Число ветвей (ребер), которые нужно пройти, двигаясь к вершине X (длина пути до корня равна 0 [Н. Вирт, 1989] или 1 [Н. Вирт, 1985]).
Уровень вершины X
Длина пути до вершины X (узел на уровне i имеет длину пути i), (рис. 1a: вершина a - на уровне 0 (корень); b, c - на уровне 1; d, e, f - на уровне 2; g, h, k - на уровне 3).
Высота (глубина) дерева
Максимальный уровень элемента дерева / удаленность от корня вершины с максимальным уровнем (высота дерева на рис. 1a равна 3).
Длина пути дерева
Сумма длин путей до всех узлов дерева (рис. 1а: длина [внутреннего] пути: 0*1+1*2+2*3+3*3=17, корень на уровне 0). Различия между длиной внутреннего и внешнего пути дерева см. в книге Н. Вирта.
Дерево, в котором порядок поддеревьев не существенен. На рис. 2 ориентированное дерево a)эквивалентно деревуb).
Дерево, расположение ветвей в котором упорядочено для каждого узла (на рис. 2 показаны два различных упорядоченных дерева). |
Рис. 2. Примеры бинарных деревьев |
Линейный список можно представить в виде древовидной структуры, каждый узел которой имеет не более 1 поддерева.