反向堆积?

你好! 我需要一种通用最佳K分类算法,我想使用HeaPQ 为此(hepify + heappop*k). 问题是堆和堆 支持从sorted()和list.sort()中知道的"反向"关键字. 尽管 装饰量不合格的模式使我可以替换"钥匙"选项,我 没有看到一种明显的方法来使HEAPQ以相反的方式工作而不制作 数据的假设. 有任何想法吗? Stefan

# 回答1

Stefan Behnel写道: HAEPQ.NLARGENG() HAEPQ.NSMALLEST() ? 仅Python 2.4 肯特
# 回答2

肯特·约翰逊·施里布(Kent Johnson Schrieb): 谢谢! 这些在文档中非常隐藏. 也许我已经读过 页面经常... Stefan
# 回答3

肯特·约翰逊(Kent Johnson)写道: 第二个想法,这实际上并没有使我走得太远. 我不知道 提前我必须选择多少,因为我需要在 *之后删除重复项 * 排序(它们不一定"重复"足以属于同一 排序桶). 我想做的是堆积,然后创建一个迭代器 结果. 但是由于堆不支持"反向" ... 还有其他想法吗? Stefan
# 回答4

您可以使用(未经测试)之类的东西 班级比较reverser: def __init __(self,s):self.s = s def __cmp __(self,o):返回cmp(o,self.s) def __lt __...#或任何操作哈希都使用 然后使用(比较reververser(f(x)),i,x)作为装饰物品 而不是(f(x),i,x) 杰夫 -----开始PGP签名------------- 版本:gnupg v1.2.1(gnu/linux) ID8DBQFCLFHRJD01MZATXX0RAUYZAKCSGFEROFIJEBVSSHPFA9 JBYIXJVWCDEBT3 n9/eavmz5jxw5uo4udmag8e = = 35BO -----结束PGP签名-----
# 回答5

Stefan Behnel写道: 将您的数据包装在将__cmp__定义为__cmp__倒数的类中,在基础数据上, 然后使用heapq? 只是对列表进行排序? 肯特·史蒂芬
# 回答6

杰夫·埃普勒(Jeff Epler)写道: 谢谢! *未经测试;). 为了避免无限的回答(和其他奇怪的错误), 您必须比较" o.s"和" self.s". HEAPQ内部使用" <="所有比较,因此足以实现 __ le__方法: def __ le __(自我,其他):返回其他<= self.s 实际上,我在2.4中查看了Heapq的C-实践,甚至看到了 为Min-Heaps和Max-Heaps提供不同的实现. 这将是 如此令人信服,如果他们俩都成为模块的一部分... Stefan

标签: python

添加新评论