问题标签 [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 投票
4 回答
1021 浏览

python - heapq.merge:将merge的结果merge后,原来的merge为空

首先我使用创建了两个结果 a & b heapq.merge,但是在mergeing a&b 之后,我发现 a 的列表是空的。

的最终结果list(a)是空的,为什么要merge(a,b)改变a?

0 投票
1 回答
4764 浏览

python - Python:heapq.heappop() 给出了奇怪的结果

我试图heapq在我的程序中使用 Python 模块,但我遇到了一个奇怪的问题heapq.heappop()。该函数似乎没有返回堆中的最小元素。看看下面的代码:

不应该先heappop()返回[654, 'b']然后再返回[1326, 'a']吗?

0 投票
1 回答
1782 浏览

python - 具有相同优先级的 Heapq

我正在尝试创造一个事件的臀部。因此,我定义了一个Event由我的不同事件继承的类。

该值last_instant是优先条件,因此堆由定义如下的元组组成:

但是,我有放置在同一位置的事件,last_instant因此heapq在. 我还没有实现它,但即使我实现了,我也不知道如何实现,因为某些事件没有任何标准来区分应该首先从堆中弹出的事件。<Event

如果相同,我如何实现一个顺序无关紧要的堆last_instant

另一方面,如果我在同一时刻(相同优先级)有相同类型(相同类别)的事件,我想将它们一起弹出并同时处理它们。

我可以看到实现这一点的最佳方法是同时弹出所有项目,将它们存储在列表中,然后按顺序处理它们。然后进入下一个瞬间。但是,它似乎与 heapq 不兼容。

谢谢!

0 投票
1 回答
12533 浏览

python - Python heapify() 时间复杂度

这是 python heapq.heapify() 的类似实现。在文档中说这个函数在 O(n) 中运行。但看起来对于 n/2 个元素,它执行 log(n) 操作。为什么是 O(n)?

0 投票
1 回答
476 浏览

python-3.x - 如何在 Heapq 中查找元素的位置

我正在尝试使用 Python 实现 HeapQ,但我坚持这种情况,我需要在哪里获取队列中键的位置?. 我碰壁试图解决这个问题。任何提示将不胜感激。

0 投票
0 回答
45 浏览

python - heapq:将自定义优先级键与不可比较的关联数据一起使用的优雅方法是什么?

文档中的一个基本示例所示,始终可以使用元组,以便将第一个元素作为优先级键进行比较。但是,如果相关数据不可比怎么办?解决这个问题的优雅方法是什么?

例如,

这发出

0 投票
0 回答
107 浏览

python - 为什么我的 heapq 中的元素没有排序 python?

我在 python 中使用了一个简单的 heapq,并在其上实现了lt函数的自定义元素。

然后我在另一个名为 P 的数组中保留一堆这些元素:

问题是当我堆放一个元素时,我希望它是我数组中的最小元素,对吗?但是这个断言在这里失败了

0 投票
1 回答
435 浏览

python - heapq custom compareTo

I'm trying to define a custome method to make an ordered insert into a priority queue in python but not getting the expected results. Once defined the insert method into the queue like the following:

And implementing the following lt in the 'node' class:

The insertion is not done by the 'f' attribute value which is what I wanna do, insert in an ascendant order determined by that value. Any help will be much appreciated.

Ex of failure:

It only puts in the first position de lowest value, which does make sense since using a priority queue but then the following ones are not sorted by the custom method I wanna declare.

0 投票
1 回答
566 浏览

python - 如何合并 k 个排序的数组,解决方案不允许重复。!

给定 k 个大小为 n 的排序数组,合并它们并打印排序后的输出。

我遵循的算法是

  • 遍历每个数组
    • 选择 k 个数组中的第 i 个索引
    • insert()在最小堆中
    • delMin()并附加结果数组。

输入:

输出:

输入:

输出:

任何人都可以帮我知道我的算法中缺少什么,以便合并第二个输入中的重复数组吗?

0 投票
2 回答
12485 浏览

python - heapq push TypeError: '<' not supported between instances

I am working in python and I have some problem with heapq. When I push an element into the heap I receive this error :

TypeError: '<' not supported between instances of 'Point' and 'Point'

Point is my internal class. I push a tuple formed by (float,Point), in according with documentation, heapq should use float as a key, but it doesn't. To be more precise sometimes use float but not always. What is the problem?