64得票5回答
如何从priority_queue中删除非顶部元素?

在我的程序中,我需要从一个优先队列中删除一个不在顶部的元素。这可以做到吗?如果不能,请提供一种方法来实现,除了创建自己的堆之外。

40得票9回答
纯函数式编程语言中高效堆的实现

作为Haskell练习,我正尝试实现堆排序。在命令式语言中,堆通常是以数组形式实现的,但在纯函数式语言中,这种方式会非常低效。因此,我研究了二叉堆,但是到目前为止,我找到的所有资料都是从命令式视角描述它们,所呈现的算法难以转换为函数式环境。如何在像Haskell这样的纯函数式语言中高效地实现堆...

37得票4回答
二叉堆和斐波那契堆的实际应用领域

斐波那契堆和二叉堆有哪些实际的应用?如果你能分享一些你使用它们解决问题的实例就太好了。 编辑:新增了二叉堆。很好奇。

29得票2回答
std::make_heap如何实现,同时最多只进行3N次比较?

我查阅了C++0x标准并发现其中规定make_heap函数所需的比较次数不应超过3*N。 也就是说,对于无序集合进行堆化操作的时间复杂度可以达到O(N)。 /* @brief Construct a heap over a range using comparison functor...

22得票3回答
二叉堆和二项堆有什么区别?

我需要知道二叉堆和二项堆的主要区别,而不管它们结构上的差异,即二叉堆只能有两个孩子(树形表示),而二项堆可以有任意数量的孩子。 我实际上只是想知道,在将二项树结构组织成第一个孩子具有一个节点、第二个孩子具有两个节点、第三个孩子具有四个节点等等形式方面,有什么特殊之处? 如果我们使用一些没有...

18得票6回答
寻找二叉堆的最后一个元素

引用维基百科: 使用传统的二叉树数据结构实现二叉堆是完全可接受的。在添加元素时,当查找二叉堆上最后一层的相邻元素时,存在一个问题,这个问题可以通过算法方法来解决... 您有关于这种算法如何工作的任何想法吗? 我找不到任何关于此问题的信息,因为大多数二叉堆都是使用数组实现的。 非常感...

18得票2回答
如何确定堆的第k大元素是否大于x

考虑一个包含n个数字的二叉堆(根节点存储最大数)。给定正整数k < n和一个数x。您需要确定堆的第k个最大元素是否大于x。您的算法必须在O(k)时间内完成。您可以使用额外O(k)的存储空间。

17得票3回答
如何在实现为二叉堆的优先队列中保留相同优先级元素的顺序?

我创建了一个二叉堆,表示优先队列。这是一个经典的众所周知的算法。该堆调度不同事件的时间排序(排序关键字为时间)。 它支持两个操作:插入和移除。堆中每个节点的键大于或等于其子节点的键。但是,在添加具有相同键的事件时,由于在调用插入或移除之后,堆向上和堆向下过程会破坏顺序,所以它们并不保留它们被...

14得票1回答
从集合构建PriorityQueue的时间复杂度是多少?

Java的PriorityQueue构造函数与Collection一起使用的复杂度是多少?我使用了以下构造函数:PriorityQueue(Collection&lt;? extends E&gt; c) 复杂度是 O(n) 还是 O(n*log(n))?

14得票2回答
如何创建一个二叉堆,使其弹出最小值而不是最大值?

我可以使用std::collections::BinaryHeap来迭代一个结构体集合,通过pop方法按从大到小的顺序排列,但我的目标是按从小到大的顺序遍历整个集合。 我已经成功地通过反转Ord实现来实现了这一点:impl Ord for Item { fn cmp(&amp;sel...