Разница между деревьями AVL и деревьями splay

Я изучаю различные деревья, и наткнулся на деревья AVL и деревья splay. Я хочу знать

  1. в чем разница между деревьями AVL и деревьями splay?
  2. на каком основании мы выбираем эти трессы?
  3. что такое положительные и отрицательные из этих деревьев?
  4. каковы характеристики этих деревьев с точки зрения обозначения big O?

2 ответов


  1. и деревья splay и деревья AVL являются бинарными деревьями поиска с отличными гарантиями производительности, но они отличаются тем, как они достигают этих гарантий производительности. В дереве AVL форма дерева всегда ограничена таким образом, что форма дерева сбалансирована, что означает, что высота дерева никогда не превышает O(log n). Эта форма поддерживается при вставках и удалении и не изменяется во время поиска. Косые деревья, с другой стороны, поддерживать эффективную изменив дерево в ответ на поиск. Таким образом, часто доступные элементы перемещаются вверх к вершине дерева и имеют лучшее время поиска. Форма деревьев splay не ограничена и варьируется в зависимости от того, какие поиски выполняются.

  2. нет жесткого и быстрого правила об этом. Однако одно ключевое различие между структурами заключается в том, что деревья AVL гарантируют быстрый поиск (O(log n)) для каждой операции, а деревья splay могут гарантировать только то, что последовательность из n операций занимает не более O (N log n) времени. Это означает, что если вам нужен поиск в реальном времени, дерево AVL, вероятно, будет лучше. Однако деревья splay, как правило, намного быстрее в среднем, поэтому, если вы хотите свести к минимуму общее время выполнения поиска дерева, Дерево splay, вероятно, будет лучше. Кроме того, деревья splay поддерживают некоторые операции, такие как разделение и слияние, очень эффективно, в то время как соответствующие операции дерева AVL более вовлечены и менее эффективны. Скошенные деревья более эффективная память, чем деревья AVL, потому что им не нужно хранить информацию о балансе в узлах. Однако деревья AVL более полезны в многопоточных средах с большим количеством поисков, потому что поиск в дереве AVL может выполняться параллельно, а не в splay-деревьях. Поскольку деревья splay изменяют себя на основе поиска, Если вам нужно получить доступ только к небольшому подмножеству элементов дерева или если вы получаете доступ к некоторым элементам намного больше, чем к другим, дерево splay будет превосходить дерево AVL. Наконец, деревья splay, как правило, легче реализовать, чем деревья AVL, так как логика вращения намного проще.

  3. см. (2)

  4. вставка дерева AVL, удаление и поиск занимают O (log n) время каждый. Деревья Splay имеют эти же гарантии, но гарантия только в амортизированном смысле. Любая длинная последовательность операций займет не более O (N log n) времени, но отдельные операции могут занять столько же, сколько O (n) время.

надеюсь, что это помогает!


1) в чем разница между деревьями AVL и деревьями splay?

Они похожи по структуре и операциям, которые мы вызываем на них. Разница в том, что в splay-деревьях после каждой операции мы стараемся держать дерево почти идеально сбалансированным, чтобы будущие операции занимали меньше времени.

2) На каком основании мы выбираем эти трессы?

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

как общее правило для выбора этих деревьев, Если вам нужно "среднее" время журнала (n) за период операций с деревом, используйте splay tree. Binary tree не может гарантировать это.

3) каковы положительные и отрицательные этих деревья?

положительными для обоих является то, что вы обходите log(n) в обеих этих структурах данных теоретически.

Как уже упоминалось, деревья splay имеют средний журнал (n) за ряд операций. Это означает, что, возможно, у тебя N раз сложность для операции по крайней мере один раз в этом наборе. Но это будет компенсировано при доступе к частым пунктам.

минус дерева двоичного поиска заключается в том, что вам нужно быть счастливым, чтобы всегда иметь log(n). Если ключей нет random, то дерево будет уменьшаться до списка, как форма только с одной стороны.

4) каковы характеристики этих деревьев с точки зрения обозначения big O?

Splay tree Log (n) в среднем для группы операций дерева. Двоичное дерево Log (n), только если ваши ключи идут в случайном порядке.

результаты выполнения очевидны здесьпрофилирование времени выполнения дерева splay Вы можете увидеть разницу во времени выполнения в поиске С и без splaying.