TSPのBellman-Held-Karpアルゴリズムの時間の複雑さ、テイク2
最近の質問では、BellmanとHeld-Karpに独立した、TSPの現在の古典的な動的プログラミングアルゴリズムについて説明しました。このアルゴリズムは、O (2 n n 2)時間で実行されることが広く報告されています。しかし、私の学生の一人が最近指摘したように、この実行時間には不当に強力な計算モデルが必要になる場合があります。O(2nn2)O(2nn2)O(2^n n^2) アルゴリズムの簡単な説明を次に示します。入力は有向グラフで構成さG=(V,E)G=(V,E)G=(V,E)とnnn頂点と非負の長さの関数ℓ:E→R+ℓ:E→R+\ell\colon E\to\mathbb{R}^+。任意頂点のsssとttt、および任意のサブセットバツXX除外すること頂点のsss及びttt、聞かせてL(s,X,t)L(s,X,t)L(s,X,t)からの最短ハミルトン経路の長さを示すsssにttt誘導された部分グラフでG[X∪{s,t}]G[X∪{s,t}]G[X\cup\{s,t\}]。Bellman-Held-Karpアルゴリズムは、次の再発に基づいています(または、経済学者や制御理論家が「ベルマンの方程式」と呼ぶのを好むように)。 L(s,X,t)={ℓ(s,t)minv∈X (L(s,X∖{v},v)+ℓ(v,t))if X=∅otherwiseL(s,X,t)={ℓ(s,t)if X=∅minv∈X (L(s,X∖{v},v)+ℓ(v,t))otherwise L(s,X,t) = \begin{cases} \ell(s,t) & \text{if $X = \varnothing_{\strut} $} \\ \min_{v\in X}~ \big(L(s, X\setminus\lbrace v\rbrace, v) + \ell(v,t)\big) & \text{otherwise} \end{cases} 頂点場合、最適な巡回セールスマンツアーの長さはです。最初のパラメーターsはすべての再帰呼び出しで定数であるため、\ Theta(2 ^ nn)個の異なるサブ問題があり、各サブ問題は最大でn個に依存します。したがって、動的プログラミングアルゴリズムはO(2 ^ nn ^ 2)時間で実行されます。sssL(s,V∖{s},s)L(s,V∖{s},s)L(s,V\setminus\{s\}, s)sssΘ(2nn)Θ(2nn)\Theta(2^n n)nnnO(2nn2)O(2nn2)O(2^n n^2) それともそれ!? 標準整数RAMモデルでは、O(logn)O(logn)O(\log n)ビットを使用して整数を一定時間操作できますが、少なくとも算術演算と論理演算では、大きい整数をワードサイズのチャンクに分割する必要があります。(そうでなければ、奇妙なことが起こります。)これは、より長いメモリアドレスへのアクセスにも当てはまりませんか? アルゴリズムがスーパー多項式空間を使用する場合、メモリアクセスには一定の時間しか必要ないと仮定するのは合理的ですか? …