私は実行に長い時間がかかる関数がたくさんあり、それぞれTrue/Falseを返すという問題があります。全体のTrue/Falseスコアを得るために、すべての関数に巨大なブール式を適用します。現在、私のコードは関数ベースではないので、すべての関数が実行され、大きなブール式が適用されます。私はすでにそれらを関数にすることで、関数式呼び出しを防ぐために短期間に実行される部分式が可能になることを理解しました。私が今必要とするのは、最小限の呼び出し数を持つように式を並べ替える方法です。次のコードを考えると短絡回路をブーリアン論理に並べ替える方法は?
(恐ろしいのコード例をあなたのアイデアを取得する必要があります):あなたが印刷されたq個のR Sを参照してください。この場合
def q():
print "q"
return False
def r():
print "r"
return False
def s():
print "s"
return False
def a():
print "a"
return False
def b():
print "b"
return False
def c():
print "c"
return False
def d():
print "d"
return False
def i():
print "i"
return False
def j():
print "j"
return False
(q() or r() or s()) and (a() and b() and c() and (i() or j()))
。すべてがFalseなので、短絡します。しかし、この場合は、最初にbまたはcを評価する必要があります。そのうちの1つがFalseの場合、式全体がFalseになるからです。最善の順序をハードコーディングできないように、最後の式がユーザーによって生成されたとします。私は欠けている非常に簡単なアルゴリズムがあると思っています。
他の二つの事柄:
1)私は、このような「いない」として、他のロジックを許可した場合はどう? 2)実行するのにかかる時間に基づいて各機能にスコアを割り当てて、それを計算することはできますか?