バックグラウンド
二分決定木は、ルートからリーフへのパスがインデックスを繰り返さないように、各内部ノード(およびルート)がインデックスラベル付けされているルート付きツリー出力によってラベル付けされ、各エッジは左の子に対して、右の子に対してでラベル付けされ。入力ツリーを適用するには:{ A 、B } 0 1 x
- ルートから開始
- リーフにいる場合は、リーフラベルまたはを出力して終了しますB
- ラベル読むあなたの現在のノードのを、もしその後、左の子に移動している場合、次に右の子に移動します。
- ステップ(2)にジャンプします
ツリーは、特に、我々は木言う、機能を評価するための方法として使用されている合計関数を表しそれぞれについて場合我々は。ツリーのクエリの複雑さはその深さであり、関数のクエリの複雑さはそれを表す最小のツリーの深さです。
問題
バイナリ決定木Tが与えられると、TとT 'が同じ関数を表すような最小の深さのバイナリ決定木T'が出力されます。
質問
このための最も有名なアルゴリズムは何ですか?下限はわかっていますか?ことがわかったらどうしますか?T ′がほぼ最小の深さであることが必要な場合はどうでしょうか?
素朴なアプローチ
ナイーブアプローチには、が与えられ、深さd − 1のすべてのバイナリ決定木を再帰的に列挙し、それらがTと同じものに評価されるかどうかをテストします。これにはO (d 2 n n !ステップ(任意のxに対してT(x)が評価するものをチェックするのにdステップかかると仮定します)。より良いアプローチはありますか?
動機
この質問は質問複雑さと時間複雑さの間のトレードオフの前の質問によって動機づけられます。特に、目標は全機能の時間分離を制限することです。実行時間tの時間最適アルゴリズムからツリーを作成し、クエリ最適アルゴリズムのためにツリーT 'に変換したいと思います。残念ながら、もしT ∈ O (N !/(N - D )!)(そして多くの場合、D ∈ Θ (n個))ボトルネックは変換です。を置き換えることができたらいいですね!/(n − d )!2 dのようなものによって。