44得票3回答
如何更新堆中的元素?(优先队列)

使用min/max-heap算法时,优先级可能会改变。处理这种情况的一种方法是删除并插入元素以更新队列顺序。 对于使用数组实现的优先级队列,这可能会成为一个性能瓶颈,看起来可以避免,特别是在优先级更改小的情况下。 即使这不是优先级队列的标准操作, 这是一种可以根据我的需求进行修改的自定义实...

39得票4回答
使用`std::greater`创建小根堆的原因,通过`priority_queue`。

我想知道为什么在使用priority_queue创建最小堆时,应该使用std::greater? std::priority_queue<T, std::vector<T>, std::greater<T> > min_heap; 对我来说,由于最小值...

37得票4回答
最大/最小堆树能够包含重复的值吗?

我想知道最大堆或最小堆树是否允许具有重复的值?我尝试了在线资源,但未能找到相关信息。

26得票3回答
C++中用于最小堆的比较器

我正在尝试使用C++中的STL make_heap等工具来创建一个1由long类型组成的小根堆,但我的比较器似乎不能正确地进行比较。以下是我的当前比较器:struct greater1{ bool operator()(const long& a,const long&...

23得票2回答
Dijkstra算法。使用最小堆作为最小优先队列。

我正在阅读《CLRS第三版》中关于Dijkstra算法的内容(第662页)。以下是书中的一段我不理解的部分: 如果图足够稀疏 - 特别是,E = o(V^2 / lgV) - 我们可以通过使用二进制最小堆实现min-priority队列来改进算法。 为什么图应该是稀疏的? 这...

21得票2回答
如何使用Rust的BinaryHeap实现f64的小根堆?

我想用浮点数来填充一个二叉堆 - 更具体地说,我想实现一个最小堆。似乎浮点数不支持 Ord,因此不能直接使用。 我尝试将它们包装起来,但迄今为止失败了。 然而,如果我能够将它们包装起来,那么我也可以实现 Ord,以使它有效地使 BinaryHeap 成为最小堆。这是我尝试过的包装器的示例:#[...

20得票3回答
使用STL来维护小根堆的简便方法是什么?

对于用户自定义的结构体,我了解到很容易实现。只需要重载运算符<即可。但是对于int/float等基本类型,我真的需要重载运算符<吗?以下是我的尝试: #include <iostream> #include <algorithm> ...

20得票7回答
用户自定义类型的优先队列

我有以下结构体:struct node { float val; int count; } 我有几个这个结构的对象。现在,我想将这些对象插入STL的优先队列中,以使优先队列根据计数来排序这些项。 有任何方法吗?最好是使用小根堆。我知道如何对原始数据类型执行上述操作,但不知道如何对结...

19得票5回答
Java,查找数组中第K大的值

我曾经参加Facebook的面试,他们问了我这个问题。 假设您有一个具有N个不同值的无序数组 $input = [3,6,2,8,9,4,5] 实现一个函数,找到第K大的值。 例如:如果K = 0,则返回9。如果K = 1,则返回8。 我采用了以下方法...

12得票2回答
在Scala中,制作最简单和最有效的小根堆的方法是什么?

val maxHeap = scala.collection.mutable.PriorityQueue[Int] //Gives MaxHeap 使用Ordering将PriorityQueue转换为最小堆的最简洁有效方法是什么?