ackermann函数的时间复杂度

时间:2013-06-28 14:47:45

标签: complexity-theory time-complexity ackermann

有人知道用big-O表示法计算ackermann函数ack(m,n)的时间复杂度或者它属于哪个复杂类? Just Ack(3,n)也足够了。 我在某处看到它是无关紧要的?

感谢。

代码段:

public class Ackermann {

    public static int ackermann(int n, int m) {

        if (n == 0)
            return m + 1;
        else if (m == 0)
            return ackermann(n - 1, 1);
        else
            return ackermann(n - 1, ackermann(n, m - 1));
    }

}

4 个答案:

答案 0 :(得分:2)

最坏情况计算时间的渐近极限表示为输入长度或时间复杂度的函数:不能定义mu递归函数,而不能指定另一个mu递归函数,与典型的大符号非常不同。这只适用于像我们的主题一样“完全”的mu递归函数。

答案 1 :(得分:1)

我不太了解这个函数,但很快就看到它,它似乎是伪多项式。也就是说,运行时取决于它的输入,并且在某些输入上可以是多项式时间,而在其他输入上可以是非多项式。这可以使用康托尔的对角化

来证明

答案 2 :(得分:1)

如果您对Ack(3,n)感兴趣,那么它就是O(取幂)。 Ack(3,n)= 2 n + 3 -3。这可以使用O(logn)操作计算。

答案 3 :(得分:1)

它主要是涉及大量复杂性的第三种情况......它的形式为(((2 ^ 2)^ 2)^ 2)^ 2等等......所以,通过检查你可以看到复杂度是2 ^(2 ^ n)......这种复杂性比n ^ n差得多,所以我在其他地方读到ackermann的函数就像原始递归函数的上界一样但是我不完全确定......需要做更多研究......