Binomial Heap
有相当特别的设计。我个人认为这个设计并不直观。
尽管诸如此类的帖子二项堆和二项式堆有什么区别? https://stackoverflow.com/questions/6215485/what-is-the-difference-between-binary-heaps-and-binomial-heaps谈到 diff 及其特殊性,我仍然在想什么时候应该使用它。
In http://en.wikipedia.org/wiki/Binomial_heap http://en.wikipedia.org/wiki/Binomial_heap, 它说
由于其独特的结构,k阶二项式树可以表示为
由两棵 k−1 阶树简单地通过附加其中之一来构造
它们是另一个 root 的最左边的孩子。这个功能是
二项式堆的合并操作的核心,这是它的主要
与其他传统堆相比的优势。
我认为二项式堆的一个优点是它的合并。然而,Leftist heap
也有 O(logN) 合并并且简单得多,为什么我们仍然使用二项式堆?我什么时候应该使用二项式堆?
edit
我想在这里问的实际问题之一是二项式堆到底有什么优点?
文章针对的是左派树 http://en.wikipedia.org/wiki/Leftist_tree says:
当向树中插入新节点时,会创建一棵新的单节点树并将其合并到现有树中。为了删除最小项,我们删除根,然后合并左右子树。这两个操作都需要 O(log n) 时间。对于插入,这比二项式堆慢,二项式堆支持在摊余常数时间内插入,最坏情况为 O(1) 和 O(log n)。
看来二项式堆的优点是插入速度更快。
至少,这是渐近分析告诉我们的。现实世界的运行时间完全是另一回事,正如吉恩在他的回答中所说,取决于恒定的因素。确定哪个更适合您的应用程序的唯一方法是测试它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)