digital-garden/dev/fundamental/structure/Сбалансированное дерево.md
2024-10-25 20:04:39 +03:00

5.1 KiB
Raw Blame History

aliases tags date
сбалансированное дерево
сбалансированное
maturity/🌱
2024-01-29

Сбалансированное ../Tree — это структура данных, в которой высота левого и правого поддеревьев каждого узла отличается не более чем на единицу. Это позволяет сохранять логарифмическую сложность поиска (O(log n)), что делает его эффективным для операций поиска, вставки и удаления.

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

Плюсы:

  • Быстрая операция поиска — O(высоты дерева), что близко к O(log n) для сбалансированного дерева.
  • Решает проблему вырожденного случая бинарного дерева.

Минусы:

  • Требует дополнительных усилий и вычислительных ресурсов для поддержания балансировки, особенно при частых вставках и удалениях.
  • В некоторых случаях операции вставки и удаления могут быть медленнее, чем в несбалансированных деревьях, из-за необходимости балансировки.

Типы сбалансированных деревьев

  • AVL-дерево: Обеспечивает балансировку после каждой операции добавления или удаления. Высота левого и правого поддеревьев каждого узла отличается не более чем на единицу. AVL-деревья подходят для приложений, где важна быстрая операция поиска.
  • Красно-черное дерево: Менее строгое, чем AVL-дерево, что делает его более быстрым для операций вставки и удаления. Красно-черные деревья используются в реализациях словарей и ассоциативных массивов.

Алгоритмы балансировки

  • Повороты: Основной метод балансировки — это повороты (левое и правое). Они позволяют перераспределить элементы дерева так, чтобы сохранить его сбалансированность.
  • Перераспределение и слияние узлов: Эти методы используются в зависимости от типа сбалансированного дерева для поддержания его свойств.

Пример балансировки дерева

Представим, что добавляется новый элемент 30 в уже существующее AVL-дерево, и дерево становится несбалансированным:

      20
     /  \
    10  25

После добавления 30 дерево становится несбалансированным, так как правое поддерево узла 25 становится слишком высоким:

      20
     /  \
    10  25
           \
            30

Чтобы восстановить баланс, выполняется левое вращение относительно узла 25, и дерево принимает следующий вид:

      20
     /  \
    10  30
         /
        25

Таким образом, балансировка восстанавливает равновесие дерева и сохраняет его свойства. Например, если левое поддерево стало значительно выше правого, выполняется правое вращение для восстановления равновесия.


Мета информация

Область:: ../../../meta/zero/00 Разработка Родитель:: Tree Источник:: Автор:: Создана:: 2024-01-29

Дополнительные материалы

Дочерние заметки