1

我有一个将 2 个对象作为参数的函数:a并且b 该函数检查(使用非常长的算法)这些对象中的哪一个更好。

如果 a 更好,则返回 -1,如果 b 更好,则返回 1,如果并列则返回 0

我的问题是:

我在一个列表中有 21 个这样的对象。

我需要找出,使用上面的函数(函数不能更改,唯一的方法是比较 2 个对象,这是一个非常复杂且冗长的算法),这 21 个对象中哪个是最好的。

我尝试了好几个小时思考如何有效地做到这一点而不进行太多次相同的比较,如何编写一个算法来找出哪个是最好的(如果它们中的两个是并列的并且它们都是最好的,它不会拿哪一个都没关系,虽然我认为平局是不可能的),而且我想不出什么好东西。

函数的名称是handCompare(a, b) 对象在名为 的列表中找到Comboslen(combos)是 21 我需要一个算法来找出组合列表中的最佳项目

感谢阅读,希望对您有所帮助:)

4

2 回答 2

8

如果您更改hand_compare()为 return 1if a 更好并且-1b 更好,这将起作用。

import functools
best = max(combos, key=functools.cmp_to_key(hand_compare))
于 2012-06-09T00:43:06.843 回答
1

最直接的方法:为每个对象创建一个对象,比较函数为__cmp__(python 2.x)或定义__lt____eq__(python 3.x)。将每个存储在一个名为 list_ 的列表中。使用 min(list_) 找到最小的值。

如果可行,可能会有所帮助的优化:如果您能想出一种将对象映射到(可能很大)整数的方法,使得 x 的整数 < y 的整数,如果原始对象 ox 小于原始对象对象 oy,然后取整数的最小值。如果它适用于您的类型,这应该会稍微加快速度。

于 2012-06-09T00:46:30.210 回答