Python和内置堆

3

目前,我正在尝试使用Python内置的heapq库编写优先队列。然而,我在尝试理解Python如何处理平局时遇到了困难。我希望有一种特定的条件,可以决定平局时应该发生什么,而不是像heapq库那样几乎随机地从队列中选择一个元素。是否有人知道重新编写平局条件的方法,或者从头开始构建优先队列会更容易?


当您查看代码时,您发现了什么?它在哪个类中?哪个方法?您尝试过子类化以替换方法并得到更喜欢的结果吗? - S.Lott
1个回答

10

heapq使用队列项上的内在比较(__le__等函数)。解决这个限制的常用方法是称为“装饰/去饰”——在引入key=参数之前,我们在排序中就是用这种方法。

简单来说,你不仅可以将自己关心的项("有效载荷")入队和出队,而且可以将这些项"装饰"成元组,以便以后能够被heapq考虑到。例如,如果您想通过按插入时间破解绑定到x属性的优先级,那么向队列中加入类似于(foo.x, time.time(), foo)的元组是很正常的做法。当然,在出队时,您需要"去饰",即获取通过出队获得的元组的最后一项[-1]

因此,只需将您需要用于"破开平局"的"次要键"放入您所"装饰"的元组中,并将其放在您希望以这种方式进行"平局破解"的键之后。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接