AVL树与B树有何不同?
答案 0 :(得分:42)
AVL树旨在用于内存使用,其中随机访问相对便宜。 B树更适合磁盘支持的存储,因为它们将更多的密钥分组到每个节点中,以最大限度地减少读取或写入操作所需的查找次数。 (这就是为什么B树常用于文件系统和数据库,例如SQLite。)
答案 1 :(得分:36)
AVL树和B树都是相似的,因为它们是数据结构,通过它们的要求,可以使它们各自树的高度最小化。这种“短”允许搜索在O(log n)时间内执行,因为最大可能的读取次数对应于树的高度。
5
/ \
3 7
/ / \
1 6 9
这是一个AVL树,它的核心是二叉搜索树。但是,它是自平衡的,这意味着当您向树中添加元素时,它将重构自身以保持尽可能高的均匀。基本上,它不允许长分支。
B树也可以这样做,但通过不同的重新平衡方案。写出来有点过于复杂,但如果谷歌搜索“B树动画”,那里有一些非常好的小程序可以很好地解释B树。
它们的不同之处在于AVL树是在考虑基于内存的解决方案的情况下实现的,而B树是在考虑基于磁盘的解决方案的情况下实现的。 AVL树不是为容纳大量数据而设计的,因为它们使用动态内存分配和指向下一块内存的指针。显然,我们可以使用磁盘位置和磁盘指针来复制AVL树的功能,但它会慢得多,因为我们仍然会有大量的读取来读取非常大的树。
当数据收集太大而不适合内存时,解决方案就是B树(有趣的事实:对于“B”实际上代表什么没有达成共识)。 B树在一个节点处拥有许多子节点,并且有许多指向子节点的指针。这样,在磁盘读取期间(读取单个磁盘块大约需要10毫秒),将返回最大量的相关节点数据,以及指向“叶节点”磁盘块的指针。这允许将数据的检索时间分摊到log(n)时间,使得B树对数据库和大型数据集检索实现特别有用。
答案 2 :(得分:13)
AVL树是一种自平衡二叉搜索树,平衡以保持O(log n)高度。
B树是一棵平衡树,但它不是二叉树。节点有更多子节点,这会增加每个节点的搜索时间,但会减少搜索需要访问的节点数。这使它们适用于基于磁盘的树。有关详细信息,请参阅Wikipedia article。
答案 3 :(得分:2)
AVL是自我平衡的,保证在平均和最差情况下所有操作都是O(log n)。
答案 4 :(得分:1)
B树使用上述所有想法。特别是B树:
1)keeps keys in sorted order for sequential traversing
2)uses a hierarchical index to minimize the number of disk reads
3)uses partially full blocks to speed insertions and deletions
4)keeps the index balanced with an elegant recursive algorithm
此外,B树通过确保内部节点至少半满来最大限度地减少浪费。 B树可以处理任意数量的插入和删除。
答案 5 :(得分:1)
AVL树是一种自平衡二叉树,它为搜索插入和删除操作启用O(lgN)平均和最差情况。它用于内存支持的搜索树(中等大小的数据集)。
B-Tree主要用作非常大的数据集的存储支持搜索树,因为它需要较少的磁盘读取(因为每个节点包含N个键,其中N> 1)。 B树被称为(N,N + 1)B树,其中N是每个节点的密钥数,N + 1是每个节点的子节点数。每个节点的密钥越多,您需要从磁盘读取的次数越少,它自然也会是一个较浅的树(较少的级别)。
答案 6 :(得分:1)
它们确实非常不同,尽管它们的用途基本相同:支持关联表。从历史上看,AVL树在内存操作方面的表现优于B树,但与CPU周期相比,访问内存时特别合适(呃)。
虽然通常在数据库存储中用于可变长度密钥,但B树在固定长度和短记录(密钥+数据)方面表现最佳。对于这样的用途,对于内存使用而言,它可能明显优于AVL树,无论是在内存占用方面(因为它们更紧凑地存储数据)和速度(它们都具有更好的缓存局部性)。
L2是一个数据结构库,它在B树上实现非常快速的关联表和序列。它还具有AVL树,并且两者的性能之间的比较很容易。
答案 7 :(得分:0)
其他回答者已经提供了关于AVL和B-Tree的相当深入的技术细节,但我想添加一个关于这两个的相对新手信息:) -
答案 8 :(得分:0)
B树
这里的一个典型用例是磁盘上的数据库,在树中的某个级别上查找某个项目很昂贵。在必须执行此操作时,您需要尽量减少工作量。每个b树都有一个最大度数,每个节点都包含项和对其他节点的引用(n个项,n + 1个引用)。这个事实使存储和以后在磁盘上找到大块项目变得容易。它还可以让您避免在添加/删除项目时重写树的大块。
AVL树
一种自平衡的平衡二叉树。平衡的二叉树是最大高度为log(n)
的一棵。
答案 9 :(得分:-1)
通俗地说 -
AVL树和二进制搜索树都相同,但AVL树有一个约束条件,左子树和右子树的高度之差应该是0,1或-1。
如果任何二叉搜索树满足这些条件,它将被称为AVL树。
二进制搜索树+高度条件是一个AVL树。
参考:Cormen算法简介 https://books.google.co.in/books ...