一个独立于Bellman和Held-Karp的问题最近讨论了TSP的当前经典动态编程算法。据普遍报道,该算法在时间内运行。但是,正如我的一名学生最近指出的那样,这种运行时间可能需要一个不合理的强大计算模型。
这是该算法的简要说明。输入由具有个顶点的有向图和非负长度函数。对于任何顶点和,以及任何不包含和的顶点子集,令表示诱导子图从到的最短哈密顿路径的长度。。Bellman-Held-Karp算法基于以下递归(或经济学家和控制理论家喜欢称其为“ Bellman方程”):Ñ ℓ :È → [R +小号吨X 小号吨大号(小号,X ,吨)小号吨ģ [ X ∪ { 小号,吨} ]
对于任何顶点,最优旅行推销员巡视的长度为。因为第一个参数在所有递归调用中都是常数,所以存在不同的子问题,并且每个子问题最多依赖于其他n个子问题。因此,动态编程算法以时间运行。
还是呢?
标准整数RAM模型允许对具有位的整数进行恒定时间操作,但是至少对于算术和逻辑运算,必须将较大的整数分解为字大小的块。(否则,可能会发生奇怪的事情。)访问更长的内存地址是否还不正确? 如果算法使用超多项式空间,是否合理地假设内存访问仅需要恒定的时间?
特别是对于Bellman-Held-Karp算法,该算法必须针对每个v将子集的描述转换为子集,以便访问备忘录表。如果子集用整数表示,则这些整数需要n位,因此不能在恒定时间内进行操作;如果它们不是用整数表示,则它们的表示不能直接用作备忘录表的索引。
那么:Bellman-Held-Karp算法的实际渐近运行时间是多少?