次の形式のヒューリスティックがあります。
if a == 1 and b == 1 and c == 1:
do something
if a == 1 and b == 1 and c == 2:
do something
if a == 3 and b == 2 and c == 1:
do something
if a == 2 and b == 2 and c == 1:
do something
if a == 3 and b == 1 and c == 3:
do something
etc.
もちろん、これにより多くの不必要な比較が行われますが、ステートメントが次のようにネストされていれば回避できます。
if a == 1:
if b == 1:
if c == 1:
do something
if c == 2:
do something
etc.
ケースを持つタプルのセット(a, b, c)
が有限であり、それぞれがアルゴリズムによって受信される可能性が同じであると仮定すると、最適な決定木を生成するにはどうすればよいですか。一般的なケースですか、それともすべての入力が実行されたときに比較の総数を最小限に抑えますか?
私は次のようなものを想像します:
In: optimal_tree([(1, 1, 1), (1, 1, 2)])
Out: "if a == 1:
if b == 1:
if c == 1:
do something
if c == 2:
do something"
In: optimal_tree([(1, 1), (2, 1), (2, 2)])
Out: "if a == 2:
if b == 1:
do something
if b == 2:
do something
if a == 1:
do something"
OR
"if b == 1:
if a == 1:
do something
if a == 2:
do something
if b == 2:
do something"