Scapegoat Tree — различия между версиями
Kolchanov (обсуждение | вклад) |
Kolchanov (обсуждение | вклад) |
||
Строка 8: | Строка 8: | ||
Если условие нарушается, запускается операция перебалансировки дерева. Заметим, что при <tex>\alpha = 1</tex>, деревом будет считаться даже линейная структура. | Если условие нарушается, запускается операция перебалансировки дерева. Заметим, что при <tex>\alpha = 1</tex>, деревом будет считаться даже линейная структура. | ||
− | |||
== Свойства == | == Свойства == | ||
− | + | Данная структура обладает следующими свойствами: | |
− | + | * Выбор коэффициента <tex>\alpha</tex> позволяет ускорить некоторые операции. Например, выбор большого значения <tex>\alpha</tex> позволит выполнять очень много операций вставки, но замедлит операции поиска. При этом выбор коэффициента можно выполнять в процессе выполнения, опираясь на входные данные. Однако, неправильный выбор <tex>\alpha</tex> приводит к сильному увеличению времени работы. | |
+ | * Не требуется проводить перебалансировку дерева при поиске, что гарантирует максимальное время работы поиска <tex>O(\log n)</tex>. | ||
+ | * В некоторых случаях операции модификации занимают <tex>O(n)</tex>, хотя из амортизированная сложность - <tex>O(\log n)</tex>. | ||
+ | * За счет отсутствия необходимости хранить дополнительные данные в вершинах данное дерево оптимальнее остальных по памяти. | ||
== Операции == | == Операции == | ||
== Оценка времени работы == | == Оценка времени работы == |
Версия 12:59, 17 июня 2016
Scapegoat Tree — структура данных, представляющая собой частично сбалансированное дерево поиска (степень сбалансированности может быть настроена), такое что операции поиска, вставки и удаления работают за O(log n), при этом скорость одной операции может быть улучшена в ущерб другой.
Содержание
Идея
При работе необходимо поддерживать состояние сбалансированного дерева, иначе время работы операции поиска может превысить
. В Scapegoat Tree используется следующая идея: введем коэффициент , который показывает, насколько дерево может быть несбалансированным. Математически это выглядит следующим образом: ; ; , где и - размер левого и правого поддерева вершины .Если условие нарушается, запускается операция перебалансировки дерева. Заметим, что при
, деревом будет считаться даже линейная структура.Свойства
Данная структура обладает следующими свойствами:
- Выбор коэффициента позволяет ускорить некоторые операции. Например, выбор большого значения позволит выполнять очень много операций вставки, но замедлит операции поиска. При этом выбор коэффициента можно выполнять в процессе выполнения, опираясь на входные данные. Однако, неправильный выбор приводит к сильному увеличению времени работы.
- Не требуется проводить перебалансировку дерева при поиске, что гарантирует максимальное время работы поиска .
- В некоторых случаях операции модификации занимают , хотя из амортизированная сложность - .
- За счет отсутствия необходимости хранить дополнительные данные в вершинах данное дерево оптимальнее остальных по памяти.