1

次の形式のヒューリスティックがあります。

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"
4

1 に答える 1