最近の質問では、BellmanとHeld-Karpに独立した、TSPの現在の古典的な動的プログラミングアルゴリズムについて説明しました。このアルゴリズムは、O (2 n n 2)時間で実行されることが広く報告されています。しかし、私の学生の一人が最近指摘したように、この実行時間には不当に強力な計算モデルが必要になる場合があります。
アルゴリズムの簡単な説明を次に示します。入力は有向グラフで構成さと頂点と非負の長さの関数。任意頂点のと、および任意のサブセット除外すること頂点の及び、聞かせてからの最短ハミルトン経路の長さを示すに誘導された部分グラフで。Bellman-Held-Karpアルゴリズムは、次の再発に基づいています(または、経済学者や制御理論家が「ベルマンの方程式」と呼ぶのを好むように)。
頂点場合、最適な巡回セールスマンツアーの長さはです。最初のパラメーターsはすべての再帰呼び出しで定数であるため、\ Theta(2 ^ nn)個の異なるサブ問題があり、各サブ問題は最大でn個に依存します。したがって、動的プログラミングアルゴリズムはO(2 ^ nn ^ 2)時間で実行されます。
それともそれ!?
標準整数RAMモデルでは、ビットを使用して整数を一定時間操作できますが、少なくとも算術演算と論理演算では、大きい整数をワードサイズのチャンクに分割する必要があります。(そうでなければ、奇妙なことが起こります。)これは、より長いメモリアドレスへのアクセスにも当てはまりませんか? アルゴリズムがスーパー多項式空間を使用する場合、メモリアクセスには一定の時間しか必要ないと仮定するのは合理的ですか?
特にベルマン・保有カープアルゴリズムのために、アルゴリズムは、サブセットの説明変換しなければならないサブセットの記述に、それぞれについて、メモ化テーブルにアクセスするためです。サブセットが整数で表される場合、これらの整数はビットを必要とするため、一定時間で操作できません。それらが整数で表されていない場合、それらの表現をメモ化テーブルへのインデックスとして直接使用することはできません。
だから:Bellman-Held-Karpアルゴリズムの実際の漸近的な実行時間はどのくらいですか?