Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
програм.docx
Скачиваний:
5
Добавлен:
16.04.2019
Размер:
78.79 Кб
Скачать

20.Поиск по двоичному дереву

Наиболее быстрым из рассмотренных методов поиска является бинарный поиск. Однако он применим только при ограничениях: его можно использовать лишь в упорядоченных массивах записей фиксиро­ванной длины при последовательном представлении данных, а в процессе поиска необходимо выполнять определенные вычисления. Следует заме­тить также, что упорядоченные последовательные массивы, удобные для поиска, неудобны для ведения, так как при добавлении или удалении записей требуется перезапись всего массива.

Быстрый поиск в массивах, использующих связанное представление данных, возможен в том случае, когда структура данных имеет вид дво­ичного дерева. Помимо быстрого поиска в таких массивах возможно "легкое включение и удаление записей.

Поиск в структуре, имеющей вид двоичного дерева, ведется в на­правлении, задаваемом указателями. Правый указатель узла ведет к за­писи с большим ключом, левый - к записи с меньшим ключом. Вычисле­ния номера и адреса очередной записи при этом не требуется.

Первое обращение происходит в корень дерева. При этом и каждом следующем обращении осуществляется сравнение аргумента поиска с ключом записи текущего узла и определение направления следующего обращения. Если в результате сравнения выяснилось, что значение аргу­мента поиска больше ключа записи текущего узла, то следующее обраще­ние осуществляется по правому адресу связи, в противном случае следу­ет обращение к порожденному узлу левого поддерева.

Наименьшее число сравнений и наименьшее время требуются при поиске в двоичном сбалансированном дереве (см. рис. 11.7). Среднее число сравнений при поиске в сбалансированном дереве пропорционально log2 N, где N - число узлов дерева. В хорошо сбалансированном дере­ве максимальное число сравнений равно числу уровней дерева.

В процессе поиска по двоичному дереву может быть осуществлена вставка нового элемента. Пусть в массив записей, имеющий структуру дерева, изображенного на ряб, 11.7, необходимо вставить запись с клю­чом 12. В процессе поиска после четырех операций сравнения выясня­ется, что записи с таким ключом в массиве нет. Эта запись окажется включенной в структуру, если на ячейку памяти, в которой эта запись размещена, будет установлен правый указатель записи с ключом 11.

Наихудшие оценки будут получены при поиске по дереву, изобра­женному на рис. 11.8. В этом случае среднее число сравнений равно N/2, а максимальное число сравнений N, т.е. такой поиск аналогичен последо­вательному.

Структура сбалансированного двоичного дерева является наиболее гибкой структурой данных. Она обеспечивает наилучшие возможности для ведения массива (его неограниченный рост, быструю вставку и уда­ление записей), самые быстрые сортировку и поиск.