用于TSP的Bellman-Held-Karp算法的时间复杂度,取2
一个独立于Bellman和Held-Karp的问题最近讨论了TSP的当前经典动态编程算法。据普遍报道,该算法在时间内运行。但是,正如我的一名学生最近指出的那样,这种运行时间可能需要一个不合理的强大计算模型。O(2nn2)O(2nn2)O(2^n n^2) 这是该算法的简要说明。输入由具有个顶点的有向图和非负长度函数。对于任何顶点和,以及任何不包含和的顶点子集,令表示诱导子图从到的最短哈密顿路径的长度。。Bellman-Held-Karp算法基于以下递归(或经济学家和控制理论家喜欢称其为“ Bellman方程”):Ñ ℓ :È → [R +小号吨X 小号吨大号(小号,X ,吨)小号吨ģ [ X ∪ { 小号,吨} ]G=(V,E)G=(V,E)G=(V,E)nnnℓ:E→R+ℓ:E→R+\ell\colon E\to\mathbb{R}^+ssstttXXXssstttL(s,X,t)L(s,X,t)L(s,X,t)ssstttG[X∪{s,t}]G[X∪{s,t}]G[X\cup\{s,t\}] 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} 对于任何顶点sss,最优旅行推销员巡视的长度为L(s,V∖{s},s)L(s,V∖{s},s)L(s,V\setminus\{s\}, s)。因为第一个参数sss在所有递归调用中都是常数,所以存在Θ(2nn)Θ(2nn)\Theta(2^n n)不同的子问题,并且每个子问题最多依赖于其他n个子问题nnn。因此,动态编程算法以O(2nn2)O(2nn2)O(2^n n^2)时间运行。 还是呢? …