1

パラメータとして 2 つのオブジェクトを受け取る関数がaあります。b この関数は、(非常に長いアルゴリズムを使用して) これらのオブジェクトのどちらが優れているかをチェックします。

a の方が優れている場合は -1 を返し、b の方が優れている場合は 1 を返し、同点の場合は 0 を返します。

私の問題は次のとおりです。

リストにはこれらのオブジェクトが 21 個あります。

上記の関数 (関数は変更できません。唯一の方法は 2 つのオブジェクトを比較することです。これは非常に複雑で長いアルゴリズムです) を使用して、これら 21 個のオブジェクトのうちどれが最適かを調べる必要があります。

同じ比較を何度も行わずに効率的に行う方法や、どちらが最適かを判断するアルゴリズムを作成する方法を何時間も考えてみました (そして、それらのうちの 2 つが同点で両方が最適な場合、どちらを取ろうと、同点なんてあり得ないと思うけど)、いい案が思いつかなかった。

関数の名前はhandCompare(a, b) です オブジェクトは というリストで見つかりますCombos21len(combos)です コンボ リストで最適なアイテムを見つけるアルゴリズムが必要です

読んでくれてありがとう。あなたが助けてくれることを願っています:)

4

2 に答える 2

8

これは、a が優れている場合と b が優れている場合hand_compare()に戻るように変更する1と機能します。-1

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

最も簡単な方法:比較関数を__cmp__(python 2.x)またはdefine __lt__and __eq__(python 3.x)として、それぞれのオブジェクトを作成します。list_ という名前のリストにそれぞれを隠します。min(list_) を使用して、最も価値の低いものを見つけます。

実用的であれば役立つ最適化: x の整数が < y の整数であるように、オブジェクトを (おそらく大きい) 整数にマッピングする方法を考え出すことができれば、元のオブジェクト ox が < 元のオブジェクトである場合オブジェクトoy、次に整数の最小値を取ります。あなたのタイプで実行可能であれば、これは少しスピードアップするはずです。

于 2012-06-09T00:46:30.210 に答える