AVL树比红黑树保持更加严格的平衡。AVL树中从根到最深叶的路径最多为~1.44 lg(n + 2),而在红黑树中最多为~2 lg(n + 1)。
因此,在AVL树中查找通常更快,但这是以更多旋转操作导致更慢的插入和删除为代价的。因此,如果您希望查找次数主导树的更新次数,请使用AVL树。
AVL以及RedBlack树是高度平衡的树数据结构。它们非常相似,真正的区别在于在任何添加/删除操作时完成的旋转操作次数。
两种实现都缩放为a O(lg N),其中N是叶子的数量,但实际上AVL树在查找密集型任务上更快:利用更好的平衡,树遍历平均更短。另一方面,插入和删除方面,AVL树速度较慢:需要更高的旋转次数才能在修改时正确地重新平衡数据结构。
对于通用实现(即先验并不清楚查找是否是操作的主要部分),RedBlack树是首选:它们更容易实现,并且在常见情况下更快 - 无论数据结构如何经常被搜索修改。一个例子,TreeMap而TreeSet在Java中使用一个支持RedBlack树。
对于小数据:
insert:RB tree&avl tree具有恒定的最大旋转次数,但RB树会更快,因为平均RB树使用较少的旋转。
查找:AVL树更快,因为AVL树的深度较小。
删除:RB树具有恒定的最大旋转次数,但AVL树可以将O(log N)次旋转视为最差。并且平均而言,RB树也具有较少的旋转次数,因此RB树更快。
对于大数据:
insert:AVL树更快。因为您需要在插入之前查找特定节点。当您有更多数据时,查找特定节点的时间差异与O(log N)成比例增长。但在最坏的情况下,AVL树和RB树仍然只需要恒定的旋转次数。因此,瓶颈将成为您查找该特定节点的时间。
查找:AVL树更快。(与小数据情况相同)
删除:AVL树平均速度更快,但在最坏的情况下,RB树更快。因为您还需要在删除之前查找非常深的节点以进行交换(类似于插入的原因)。平均而言,两棵树都有恒定的旋转次数。但RB树有一个恒定的旋转上限。
原文链接:
https://blog.csdn.net/21aspnet/article/details/88939297