
- •Адресные типы
- •Использование динамической памяти
- •Линейные списки
- •Формы представления линейных списков в оперативной памяти
- •Стеки, очереди, деки
- •Представление стека в непрерывной памяти (в виде массива)
- •Представление стека в связанной памяти (в виде односвязного списка)
- •Очереди
- •Представление очереди в непрерывной памяти (в виде массива)
- •Представление очереди в связанной памяти (в виде односвязного списка)
- •Односвязный список
- •Двусвязный список
- •Кольцевые списки
- •Сортировка с помощью прямого выбора
- •Сортировка с помощью прямого обмена (пузырьковая)
- •Оценка затрат на поиск элемента
Оценка затрат на поиск элемента
Определим число ссылок, которые необходимо пройти при поиске конкретного узла в списке (все значения узлов ищутся с одинаковой вероятностью).
НЕУПОРЯДОЧЕННЫЙ СПИСОК (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)