高度平衡树与重量平衡树的比较
什么是高度平衡树?
自平衡二叉搜索树是高度平衡的二叉树,其每个节点的左右子树高度差的绝对值不大于一。一棵空树是高度平衡的。如果满足以下条件,则非空二叉树 T 是平衡的:
- T 的左子树是平衡的。
- T 的右子树是平衡的。
- 左子树和右子树的高度差不大于1。
笔记:
Every complete binary tree is height-balanced.
例子:
Red Black Tree、Splay Tree 和 AVL Tree 是高度平衡的二叉搜索树。
什么是权重平衡二叉树?
权重平衡树是一棵二叉树,其中每个节点的左子树中的节点数至少是右子树中节点数的一半,最多是其两倍。它是一个基于搜索每个单独节点的概率知识来平衡的二叉树。在每个子树中,权重最高的节点出现在根部,从而导致更有效的搜索性能。最有可能被搜索/访问的节点具有最短的搜索时间。
例子:
霍夫曼树。
在上图中,字母代表节点值,数字代表节点权重。
为什么平衡的定义不同
发明二叉搜索树 (BST) 是为了使搜索比在无序数组中搜索更有效。但是,当 BST 不平衡时,案例搜索效率低下。为了有效搜索,建议保持树平衡。但是由于值的频繁添加和删除,保持 BST 平衡是困难且低效的。因此,发明了一种通过向每个节点添加更多信息或允许节点有两个以上子节点来保持 BST 平衡的方法。这种发明树的一些例子是 AVL 树、2-3 树、B-树、红黑树等。
高度平衡和重量平衡树的比较
高度平衡的树改进了最坏情况的查找时间(对于二叉树,它总是以 log2(n) 为界),代价是使典型情况大约少一次查找(大约一半的节点将是在最大深度)。
如果您的权重与查找频率有关,则权重平衡树将提高平均查找时间,但代价是使最坏情况变长(请求越频繁的项具有更高的权重,因此往往是在较浅的树中,成本是较不频繁请求的项目的较深的树)。S No. Height Balanced Tree Weight Balanced Tree 1 It is the binary tree that is balanced based on the height of the subtrees. It is the binary tree that is balanced based on the weight on the edges of the tree. 2 In a height-balanced tree, the absolute difference of height of the left subtree and the right subtree should be minimum. In weight balanced tree, the absolute difference between the weight of the left subtree and the right subtree should be minimum. 3 It will improve the worst-case lookup time at the expense of making a typical case roughly one lookup less It will improve the average lookup time at the expense of making the worst-case higher. 4 The restructuring operation on a node with n descendants happens every 2-O(lg n) operation. The restructuring operation on a node with n descendants happens every O(1/n) operation.
哪个最好?
确定哪一个是最好的二叉搜索树的最好方法是测量两棵树的性能。这可以通过以下步骤完成:
- 收集有代表性的查询流量。
- 建立一个可以计算树操作的测试台。
- 针对高度平衡树和权重平衡树重放预设查询。
作为一般规则,高度平衡的树会更好地工作,请求频率在整个数据集中越均匀,而且它越偏斜,从重量平衡树中获得的优势就越大。