是否有可能制作O((n!)!)复杂度算法?

时间:2014-04-26 02:47:59

标签: algorithm complexity-theory factorial

我无法想象如何构建这样的算法。

算法"对于N个元素的每个排列,强制推进旅行商问题,其中边缘由元素的顺序决定"有这么复杂吗?

3 个答案:

答案 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"