我无法想象如何构建这样的算法。
算法"对于N个元素的每个排列,强制推进旅行商问题,其中边缘由元素的顺序决定"有这么复杂吗?
答案 0 :(得分:5)
这是你的算法!
import math
def eat_cpu(n):
count = 0
for _ in xrange(math.factorial(math.factorial(n))):
count += 1
return count
eat_cpu(4)
这是一个计算(n!)的函数!使用增量方法。需要O((n!)!)时间。
实际上,经过反思,我意识到这个算法也是O((n!)!):
def dont_eat_cpu(n):
return 0
因为O是上部绑定。抛出O(...)时我们常常忘记这一点。之前的算法因此是Theta((n!)!)除了是O((n!)!),而这个只是Theta(1)。
答案 1 :(得分:4)
枚举集合的所有分区为O(n!)
。现在,一组中所有分区的所有排列都是O((n!)!)
,尽管这个例子有点人为。现在,为了得出一个有用的算法,它是一个完全不同的故事。我不知道任何这样的算法,并且无论如何它的缩放将是非常可怕的。
答案 2 :(得分:1)
你可以做得更好 - 已知存在需要2 ^ 2 ^(p(n))时间来解决的问题 - 请参阅http://en.wikipedia.org/wiki/2-EXPTIME - 看来这些问题也不是完全假设的:"许多完全可观察的游戏的推广是EXPTIME-complete"