问题标签 [heapq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
32 浏览

python - 找到堆的平均最大值

这是条件
,所以当

我用这种方式尝试过,但是某些测试用例没有通过
,为什么要修复此代码,如果有更好的方法,请告诉我

0 投票
1 回答
167 浏览

python - heapq.merge() 如何与无限生成器一起工作?

我想了解heapq.merge()无限生成器是如何工作的。考虑这个例子:

文档声明它不会一次将数据全部拉入内存。但是它是如何消耗每个无限生成器的呢?

0 投票
1 回答
74 浏览

algorithm - 如何改进此代码以查找数组的 k 个最大元素?

以下用于查找数组的 k 个最大元素的代码会导致 TLE 错误。如何优化它以使其运行得更快?

0 投票
0 回答
242 浏览

python - 提高python heapq的性能?

我希望提高从列表或数组中删除(弹出)最小项目的速度,同时还可以动态添加项目。最大项目数是固定的,所以我可以使用初始化的 numpy 数组,但到目前为止,我已经看到 heapq 的最佳性能。下面是我的实现是 Cython,下面的虚拟代码运行大约 0.7 秒。

在 Python 中有什么更好的可能吗?我简要地查看了排序列表(https://pypi.org/project/sortedcontainers/),但没有看到性能改进。通过切换到纯 C,我会看到明显的改进吗?在我的完整代码中,我只需要使用 heappush 和 heappop 操作。

编辑:澄清一下,在完整代码中,被推送到堆的值不是任何排序或预定义的顺序(因此使用堆来有效地找到最小值)。

0 投票
1 回答
1375 浏览

list - 如何在python中将列表添加到heapq

如何直接将输入列表添加到堆中?,其中一些inbuild函数用于push,get min,extract min但是如何从堆中提取最大值。一些功能,如..

  1. heapify(iterable) :- 此函数用于将 iterable 转换为堆数据结构。即按堆顺序。

  2. heappush(heap, ele) :- 此函数用于将其参数中提到的元素插入堆中。调整顺序,从而保持堆结构。

  3. heappop(heap) :- 此函数用于从堆中删除并返回最小元素。调整顺序,从而保持堆结构。

0 投票
1 回答
150 浏览

python-3.x - TypeError:在 python3 上的 heapq.heapop 上,但在 python2 中工作

我正在研究一种使用霍夫曼编码变体的基因组压缩算法。我在python2中有以下代码:

我正在尝试在 python3 中运行它。但是,我收到如下类型错误:

进入函数的输入是一个元组列表。说,

我很困惑,为什么它在 python 2 中工作但在 python3 中没有。我尝试调试程序并将其缩小到出现错误的行。模块 heapq 的功能如下:

在在线的 siftup 函数中进行一些迭代后出现错误

我尝试打印 and 的类型rightposendpos但我没有看到 str 的实例 - 每次它只是元组。使用python2,该函数成功执行,经过一些步骤后产生以下结果。

但是在python 3中,经过这么多步骤后我遇到了错误。

之后,出现错误:“TypeError:'tuple'和'str'的实例之间不支持'<'”

我寻求帮助,使这段代码在 python3 中工作。

0 投票
1 回答
2814 浏览

python - 如何在不删除(弹出)它的情况下访问 heapq 中的顶部元素 python?

如何在不删除(弹出)它的情况下访问 heapq 中的顶部元素 python?
我只需要检查我的 heapq 顶部的元素而不弹出它。我怎样才能做到这一点。

0 投票
1 回答
207 浏览

python - 如何使用`heapq.merge`?

这是我一直在尝试的片段:

我期待[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]是因为reverse=True。我究竟做错了什么?

0 投票
0 回答
61 浏览

python - 为什么 heapq.heapify 在将切片传递给列表时不会更改列表?

根据之前的回答

切片列表不会生成列表中对象的副本;它只是复制对它们的引用。

但是,当我运行以下命令时:

我明白了

最后的打印输出不会改变基础列表a。但是,当将切片从 更改a[1:]a(将其传递到heapify)时,最后的打印输出会更改:

为什么?

0 投票
0 回答
165 浏览

python - 带有对象 heappush 的 Python 优先级队列不支持对象之间的“>”

在我尝试实现 A* 搜索的简单版本时,我试图将以下内容排入优先级队列:

  • 优先级:从源到当前元素的启发式值和成本的总和
  • 队列节点:具有数据成员点和成本的类队列节点的对象代码如下所示:'''s = queueNode(start, 0) q.put((s.dist + heuristics[s.pt[0]] [s.pt[1]],s)) # 使源单元入队'''

但是,它给出了以下错误: in _put heappush(self.queue, item) TypeError: '<' not supported between 'queueNode' and 'queueNode'

这是类队列节点的代码

更新: 我试图通过这两个实现使类具有可比性

第一的

第二

它仍然给出同样的错误

更新: 解决方法是使用列表对象而不是优先队列,并在每次输入新元素时对其进行排序。 代码 q=[] 追加 q.append ((heuristics[i][j],queueNodeObject)) 基于 成本排序