16得票5回答
更改优先级队列中项目的优先级

使用 Scala 2.9 实现一种 Dijkstra 算法(伪代码)val queue = new PriorityQueue queue.insert(...) while (!queue.isEmpty) { val u = queue.extractMin queue.forea...

16得票3回答
C++重载数组运算符

我正在创建一个堆,就像这样:struct Heap { int H[100]; int operator [] (int i) { return H[i]; } //... }; 当我尝试从中打印元素时,我会这样做:Heap h; // add some ele...

16得票5回答
如何以O(K*log(K))的时间复杂度打印出给定堆中最大的K个元素?

针对以下问题,我对当前的解决方案并不完全确定: 问题: 给定一个最大堆,有 n 个元素,存储在数组 A 中,是否可以用 O(K*log(K)) 的时间复杂度打印出最大的 K 个元素? 我的答案: 可以,因为查找一个元素需要 O(log(K)) 的时间,因此对于 K 个元素这样做将需要 ...

16得票4回答
最大堆中第K大的元素

我正在努力想出解决以下问题的方法: 给定一个用数组表示的最大堆,返回第k大的元素而不修改堆。我被要求在线性时间内完成,但被告知可以在对数时间内完成。 我想到了一种解决方案: 使用第二个最大堆并将k或k+1个值填充进去(广度优先遍历原始堆),然后弹出k个元素并获取所需元素。我认为这...

16得票3回答
移动窗口的最小/最大值能在O(N)内实现吗?

我有一个输入数组 A A[0], A[1], ... , A[N-1] 我希望有一个名为Max(T,A)的函数,它返回变量A上移动窗口大小为T时的最大值B。 B[i+T] = Max(A[i], A[i+T]) 使用最大堆来跟踪当前移动窗口A [i]到A [i + T]上的最大...

16得票7回答
为什么Java使用堆进行内存分配?

我刚读了一本Java书中的一句话,说Java中的对象驻留在堆上。 是因为使用堆是存储数据和快速检索数据的最佳方式吗? 作为初学者,我只对数据结构有一些想法。我的意思是为什么不用栈或其他东西呢?

15得票5回答
堆被认为是一种抽象数据类型吗?

我正在学习数据结构课程,对于什么是抽象数据类型(ADT)和什么不是(如果不是ADT,则必须是实现)有些困惑。 具体而言,我在谈论堆。 我在维基百科上读到,“堆是一种专门的基于树的数据结构”,这是否意味着它是一个ADT?如果是,那么我就不理解下面这句话,同样来自维基百科,“堆是实现名为优先队...

15得票2回答
如何配置std::priority_queue以忽略重复项?

我如何配置 std::priority_queue 以忽略重复项? 当我添加一个已经存在的键时,应该忽略这个新键。(在我的情况下,旧键和新键的优先级总是完全相同的。) 就复杂度而言,这不会有任何影响:它将尝试在适当的位置插入,找到已存在的键并什么都不做。问题只是是否可以通过配置来实现这一点...

15得票4回答
跟踪扩展数组的中位数

面试问题: 以下为编辑版 给定一个数组,您可以从该数组中创建两个堆,一个是最小堆,另一个是最大堆。现在使用这两个提供的堆,在O(nlog n)时间内找到数组的中位数。 已更正问题 随机生成数字并存储到(扩展)数组中。您如何跟踪中位数? 解决方案 可以使用2个堆来解决此问题,并且始终可以在...

15得票4回答
什么是适用于队列的正确数据结构,支持O(1)时间的最小值和最大值操作?

什么是支持Enque、Dequeue、Peak、Min和Max操作并且所有这些操作的时间复杂度均为O(1)的队列的正确数据结构。 最显然的数据结构是链表,但是Min、Max操作将会是O(n)。优先队列是另一个完美的选择,但是Enqueue、Dequeue应该按照队列(FIFO)的正常方式工作...