【发布时间】:2012-01-30 21:47:35
【问题描述】:
我从 (Lafore) 学习的教科书首先介绍了红黑树,并且不包含任何伪代码,尽管所介绍的相关算法看起来相当复杂,有许多独特的案例。
接下来,他介绍了 2-3-4 树,在我看来,这些树似乎更易于理解,而且我猜想实现起来更简单。他包含了一些非常清晰的实际 Java 代码。他似乎暗示 2-3-4 更容易实现,根据我目前所见,我会同意。
然而,*却说相反……我认为这可能是不正确的:
http://en.wikipedia.org/wiki/2-3-4_tree
2-3-4 树是红黑树的等距,这意味着它们是 等价的数据结构。换句话说,对于每棵 2-3-4 树, 至少存在一棵带有数据元素的红黑树 相同的顺序。此外,对 2-3-4 树的插入和删除操作 导致节点扩展、拆分和合并的等价于 红黑树中的颜色翻转和旋转。简介 红黑树通常首先引入 2-3-4 树,因为它们是 概念上更简单。 但是,2-3-4 树可能很难 在大多数编程语言中实现,因为大量 树上的操作涉及的特殊情况。红黑树是 更容易实现,所以倾向于被使用。
具体来说,关于“大量特殊情况”的部分对我来说似乎很落后(我认为是RB有大量特殊情况,而不是2-3-4)。但是,我仍在学习(老实说,我还没有完全了解红黑树),所以我很想听听其他意见。
作为旁注...虽然我同意 Lafore 所说的大部分内容,但我认为有趣的是,与 Wikipedia 所说的常见(RB 之前的 2-3-4)相比,他以相反的顺序呈现它们。我确实认为首先 2-3-4 会更有意义,因为 RB 更难以概念化。也许他选择了这个顺序,因为 RB 与他在上一章刚刚完成的 BST 的关系更密切。
【问题讨论】:
-
我不确定哪个更容易实现,但this 可能会有所帮助。
-
这似乎很主观,所以也许您可以编辑问题以更具体地说明什么构成“更容易”。也许只是需要考虑的特殊情况的数量?
-
我明白你在说什么,但是我提到的*和教科书都使用了相同的通用性......即仅根据“易用性”或“简单性”比较两种不同算法的实现。 "我猜想量化这样一个模糊词的指标的一个想法是 SLOC。另一个是“易于理解”,这确实是主观的......但我认为大多数情况下这个指标是正确的:更少的 SLOC = 更容易理解。
标签: data-structures b-tree red-black-tree