|
|
1
8
好吧,我想回答这个问题的参考文献和研究不多。相反,我花时间去尝试你不同的想法和方法。我没有发现比RB树更好的东西,但也许这只是搜索偏差。 RB树可以用四个简单的规则(插入)进行平衡,如 shown by Chris Okasaki :
AVL树可以用相似的模式匹配方法进行平衡。然而,这些规则并没有得到很好的压缩:
由于AVL树通常被认为不如RB树,它们可能不值得额外的麻烦。 理论上,AA树可以很容易地通过以下方法进行平衡:
但不幸的是Haskell不喜欢
Splay树很困难,因为您需要关注单个节点,而不是树的静态结构。它可以通过 merging insert and splay . treap在功能环境中也很难实现,因为您没有全局随机生成器,但需要在每个节点中都保留实例。这可以通过 leaving the task of generating priorities to the client ,但即使这样,也不能使用模式匹配进行优先级比较。 |
|
|
2
6
正如你所说,红黑树并不难用。你给过吗 finger trees a look ? 您可能对使用类似于 zipper. 你可能会发现另一棵有趣的树是 AA tree 它是红黑树的简化。 |
|
|
3
4
这是一个已经实现的。 Haskell中有平衡树的良好实现,如Data.Map和Data.Set。他们不满足你的需要吗?不要重新实现,重复使用。 |
|
|
4
1
OCaml标准库使用AVL树
|