2015-09-03 5 views
1

Дерево AVL - хорошо известная структура данных внутренней памяти, тогда как Сбалансированное дерево - это известная структура данных внешней памяти. Почему мы не можем использовать Сбалансированные деревья для внутренней памяти?AVL Tree vs Balanced Tree

+0

AVL-деревья также сбалансированы. И, очевидно, все, что работает во внешней памяти, все еще работает во внутренней памяти. – harold

+0

Вы, очевидно, правы, их можно использовать, но почему сбалансированные деревья не предпочтительны для вычисления ЦП во внутренней памяти как деревья AVL? – anand011090

ответ

2

Вы очень любите можете иметь сбалансированные деревья во внутренней памяти. Дерево AVL - это просто один тип сбалансированного дерева, а также другие, такие как красно-черные и 2-3-4 дерева.

Итак, я не уверен , где вы получили идею, что сбалансированные деревья не могут существовать во внутренней памяти, но я бы передумал, если бы я был вами.

И, на самом деле, вы можете поместить дерево AVL на диск, если вы так наклонены.


Я подозреваю, основываясь на комментариях, что вы может думать о является BTree который, как бинарное дерево, но каждый узел может содержать более одного значения и иметь более двух детей, таких как:

root node -, 
      | 
      V 
+------+------+------+ 
| Val1 | Val2 | val3 | 
+------+------+------+ 
/  |  |  \ 
<other nodes down here> 

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

Итак, если вы можете поместить десять значений в блок диска, более эффективно использовать BTree (тогда как память не имеет понятия размера блока, поэтому может быть предпочтительнее использовать более простой алгоритм - BTrees должны сочетаться оба дерева поиска, чтобы найти узел и линейный/двоичный поиск, чтобы найти значение в узла).

Но, в то время как BTrees может быть типа сбалансированного дерева, это снова только один типа.

+0

Если мы используем дерево AVL или RB в базе данных для индексации, то, очевидно, это будет тратить намного больше места, чем B-Tree. По этой причине только мы говорим, что B-дерево имеет хороший коэффициент затрат ввода-вывода, поскольку в нем содержится больше, чем много ключей в узле или блоке диска. ** Теперь для вычисления ЦП, есть ли разница в производительности? ** – anand011090

+1

@ anand011090, да. Для BTree (который является только * одним типом сбалансированного дерева) требуется больше работы, потому что вам нужно использовать алгоритмы дерева, чтобы найти узел, в котором находится значение, затем либо линейный поиск, либо двоичный отбор, чтобы найти значение * внутри * узел. – paxdiablo