Jump to content

Самобалансирующееся двоичное дерево поиска

Пример несбалансированного дерева; следование пути от корня до узла занимает в среднем 3,27 обращений к узлу
То же дерево после балансировки по высоте; среднее усилие на пути снизилось до 3,00 обращений к узлу

В информатике самобалансирующееся двоичное дерево поиска (BST) — это любое узлов на основе двоичное дерево поиска , которое автоматически сохраняет свою высоту (максимальное количество уровней ниже корня) небольшой при вставке и удалении произвольных элементов. [1] Эти операции, разработанные для самобалансирующегося двоичного дерева поиска, содержат меры предосторожности против безграничного увеличения высоты дерева, так что эти абстрактные структуры данных получают атрибут «самобалансирующийся».

Для бинарных деревьев со сбалансированной высотой высота определяется как логарифмическая. в номере предметов. Это относится ко многим деревьям двоичного поиска, таким как деревья AVL и красно-черные деревья . Раскидистые деревья и тропы являются самобалансирующими, но не сбалансированными по высоте, поскольку их высота не гарантированно будет логарифмической по количеству элементов.

Самобалансирующиеся двоичные деревья поиска обеспечивают эффективную реализацию изменяемых упорядоченных списков и могут использоваться для других абстрактных структур данных, таких как ассоциативные массивы , очереди приоритетов и наборы .

Вращение деревьев — это очень распространенная внутренняя операция в самобалансирующихся двоичных деревьях, позволяющая поддерживать идеальный или почти идеальный баланс.

Большинство операций с двоичным деревом поиска (BST) занимают время, прямо пропорциональное высоте дерева, поэтому желательно, чтобы высота была небольшой. Бинарное дерево высотой h может содержать не более 2 0 +2 1 +···+2 час  = 2 час +1 −1 узел. Отсюда следует, что для любого дерева с n узлами и высотой h :

И это подразумевает:

.

Другими словами, минимальная высота двоичного дерева с n узлами равна log 2 ( n ), округленному в меньшую сторону ; то есть, . [1]

могут дать дерево высоты n Однако простейшие алгоритмы вставки элементов BST в довольно частых ситуациях . Например, когда элементы вставляются в отсортированном порядке ключей , дерево превращается в связанный список с n узлами. Разница в производительности между двумя ситуациями может быть огромной: например, когда n = 1 000 000, минимальная высота равна .

Если элементы данных известны заранее, высоту можно поддерживать небольшой в среднем смысле, добавляя значения в случайном порядке, в результате чего получается случайное двоичное дерево поиска . Однако во многих ситуациях (например, в онлайн-алгоритмах ) такая рандомизация нежизнеспособна.

Самобалансирующиеся бинарные деревья решают эту проблему, выполняя преобразования дерева (например, повороты дерева ) во время вставки ключа, чтобы сохранить высоту, пропорциональную log 2 ( n ). Хотя это и требует определенных накладных расходов , они не превышают всегда необходимых затрат на поиск и могут быть оправданы обеспечением быстрого выполнения всех операций.

Хотя возможно поддерживать BST минимальной высоты с ожидаемым операций (поиск/вставка/удаление), дополнительные требования к пространству, необходимые для поддержания такой структуры, как правило, перевешивают уменьшение времени поиска. Для сравнения, AVL-дерево гарантированно имеет коэффициент 1,44 от оптимальной высоты, при этом в простой реализации требуется всего два дополнительных бита памяти. [1] Поэтому большинство самобалансирующихся алгоритмов BST удерживают высоту в пределах постоянного коэффициента этой нижней границы.

В асимптотическом смысле (« Big-O ») самобалансирующаяся структура BST, содержащая n элементов, позволяет выполнять поиск, вставку и удаление элемента в наихудшее время и упорядоченное перечисление всех элементов в время. Для некоторых реализаций это границы времени для каждой операции, а для других — амортизированные границы для последовательности операций. Это время асимптотически оптимально среди всех структур данных, которые манипулируют ключом только посредством сравнения.

Реализации

[ редактировать ]

Структуры данных, реализующие этот тип дерева, включают:

Приложения

[ редактировать ]

Самобалансирующиеся двоичные деревья поиска можно естественным образом использовать для создания и поддержания упорядоченных списков, таких как очереди с приоритетами . Их также можно использовать для ассоциативных массивов ; Пары ключ-значение просто вставляются в порядке, основанном только на ключе. В этом качестве самобалансирующиеся BST имеют ряд преимуществ и недостатков перед своим основным конкурентом — хеш-таблицами . Одним из преимуществ самобалансирующихся BST является то, что они позволяют быстро (действительно, асимптотически оптимально) перечислять элементы в ключевом порядке , чего не обеспечивают хэш-таблицы. Одним из недостатков является то, что их алгоритмы поиска усложняются, когда существует несколько элементов с одним и тем же ключом. Самобалансирующиеся BST имеют лучшую производительность поиска в худшем случае, чем большинство [2] хеш-таблицы ( по сравнению с ), но имеют худшую производительность в среднем случае ( по сравнению с ).

Самобалансирующиеся BST можно использовать для реализации любого алгоритма, требующего изменяемых упорядоченных списков, для достижения оптимальной асимптотической производительности в худшем случае. Например, если сортировка двоичного дерева реализована с помощью самобалансирующегося BST, мы получим очень простой для описания, но асимптотически оптимальный алгоритм. алгоритм сортировки. Точно так же многие алгоритмы в вычислительной геометрии используют варианты самобалансирующихся BST для решения таких проблем, как проблема пересечения отрезков прямой и проблема местоположения точки эффективного . (Однако для средней производительности самобалансирующиеся BST могут быть менее эффективными, чем другие решения. В частности, сортировка двоичного дерева, вероятно, будет медленнее, чем сортировка слиянием , быстрая сортировка или пирамидальная сортировка , из-за накладных расходов на балансировку дерева, поскольку а также шаблоны доступа к кешу .)

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

См. также

[ редактировать ]
  1. Перейти обратно: Перейти обратно: а б с Дональд Кнут . Искусство компьютерного программирования , Том 3: Сортировка и поиск , Второе издание. Аддисон-Уэсли, 1998. ISBN   0-201-89685-0 . Раздел 6.2.3: Сбалансированные деревья, стр. 458–481.
  2. ^ Хеширование Cuckoo обеспечивает производительность поиска в худшем случае. .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 30774af29bf3368c22dbdec5c3ff754b__1706373420
URL1:https://arc.ask3.ru/arc/aa/30/4b/30774af29bf3368c22dbdec5c3ff754b.html
Заголовок, (Title) документа по адресу, URL1:
Self-balancing binary search tree - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)