“ Brodal搜索树”是否真的已实现实际应用?

时间:2018-12-27 12:52:27

标签: scala haskell data-structures functional-programming ocaml

Brodal等。他们在ESA '06 paper中证明了具有对数时间搜索,更新和插入以及恒定时间合并的纯功能结构。 (请注意,我并不是在谈论Brodal堆,这是一种不同的数据结构,已广泛用于实现纯功能优先级队列。)这似乎是一个非常有利可图的结果,应该导致有效的纯功能集和映射,但是我在任何地方都看不到它们:

  • Haskell的containers使用亚当斯树;
  • OCaml标准库使用AVL树;
  • Scala的不可变排序图是使用红黑树实现的。

如果Brodal树确实取得了如此好的成绩,为什么不将它们改编成主流的功能编程语言标准库呢?实际上,我什至没有看到Brodal树的一种实现!

具体是因为:

  • 他们很难(或实际上几乎不可能)正确实施;
  • 常数很大,实际收益似乎很小;
  • 其他原因;
  • 还是上述的组合?

1 个答案:

答案 0 :(得分:1)

正如评论中提到的,论文中的信息非常有限,导致人们怀疑常量非常大,此外:

  1. 该结构实际​​上并未声称支持 O(1) 时间内的一般合并。它只声称支持一个更受限制的连接函数,连接相对于彼此排序的树。给定一种拆分树的方法,此操作对于并行计算很有用,但在这种情况下,对数连接对于任何实际目的来说都足够便宜。
  2. 该结构不支持在元素处进行拆分,也没有为联合、交集等提供有效的实现。

与上面有些重叠,阅读这篇文章我认为结论中的以下注释可能是为什么没有为实现付出太多努力

<块引用>

拆分将使每个树集合的此属性无效,并且 将导致 (log n log log n) 次搜索和更新。