58得票4回答
为什么在数组实现的堆中,索引0被留空?

我正在学习数据结构,每个资源都告诉我在实现堆时不要使用数组的第0位,而没有给出任何解释。我搜索了网页,搜索了StackExchange,但都找不到答案。

52得票7回答
如何使用堆在线性时间内找到一组数字的中位数?

维基百科表示: 选择算法:使用堆可以在线性时间内找到最小值、最大值、最小值和最大值、中位数或者第k个最大元素。 它只是说可以做到,并没有说明如何做。 你能告诉我如何使用堆来实现这些操作吗?

50得票6回答
何时应使用make_heap而不是优先队列?

我有一个向量,想要用它来创建堆。我不确定是否应该使用C++的make_heap函数还是将我的向量放入优先队列中?就性能而言,哪个更好?在什么情况下应该使用其中之一?

47得票7回答
如何在Python的heapq中实现降低关键字功能?

我知道可以用 O(log n) 的时间复杂度实现 decrease-key 功能,但是我不知道怎么做?

46得票10回答
有没有一个固定容量且具有自定义比较器的优先队列实现?

相关问题: Java PriorityQueue with fixed size 如何使用PriorityQueue? 获取数组中N个最小元素的索引 Scala:是否有一种像Java中那样使用PriorityQueue的方法? 我有一个非常大的数据集(超过500万个项目),我需要从中获...

41得票7回答
优先队列/堆更新

Java是否有一种简单的方法来重新评估 PriorityQueue 中对象的优先级,一旦其优先级发生了改变?我在 Javadoc 中找不到任何迹象,但肯定有一种方法可以做到,对吧?目前我正在删除该对象,然后重新添加它,但这显然比运行堆上的更新要慢。

41得票4回答
heapq.nlargest的时间复杂度是什么?

我在观看这个 PyCon 演讲,在 34:30 处,演讲者说获取列表中前 t 个最大元素可以在 O(t+n) 的时间复杂度内完成。 这是怎么做到的呢?我理解创建堆本身就需要 O(n) 的时间复杂度,但是 `nlargest` 的时间复杂度是多少呢?是 O(n+t) 还是 O(t)(实际算法是...

40得票8回答
在堆中查找元素

我记得堆可以用来搜索其中是否包含某个元素,并且时间复杂度为O(logN)。但是突然间我想不起来具体的细节了,我只能找到获取最小值、删除和添加等相关操作。 有人能给我一些提示吗?

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

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

39得票3回答
是否有标准的Java实现Fibonacci堆?

我正在研究不同种类的堆数据结构。 斐波那契堆似乎具有更好的最坏时间复杂度,可用于 (1) 插入、(2) 删除和 (3) 查找最小元素的操作。 我在 Java 中发现了一个名为 PriorityQueue 的类,它是平衡二叉堆。但为什么他们没有使用斐波那契堆呢? 此外,在 java.uti...