0

我需要找到阿克曼函数的优化并解释阿克曼问题本身的问题。但是,我不确定我应该从哪里开始。我知道阿克曼函数的增长速度比任何原始递归函数都快。也许使用 BigInteger 存储结果会有所帮助?或者也许使用记忆?

例如,如果我们知道 A(0,1) = 1+1, A(1,0) = A(0,1), A(1, 1) = A(0,A(1,0)) 我可以根据“n”从那里构建。
这听起来合理还是无法实现?是什么实际问题导致它即使对于少数人也能如此快速地增长?

class Ackermann
{
 
    static int ack(int m, int n)
    {
        if (m == 0)
        {
            return n + 1;
        }
        else if((m > 0) && (n == 0))
        {
            return ack(m - 1, 1);
        }
        else if((m > 0) && (n > 0))
        {
            return ack(m - 1, ack(m, n - 1));
        }else
        return n + 1;
    }

    public static void main(String args[])
    {
        System.out.println(ack(1, 2));
    }
}
4

1 回答 1

1

这篇文章中,您可以找到以下内容:

只有通过不一遍又一遍地重新计算子结果才能实现真正的执行时间增益。记忆是一种优化技术,其中函数调用的结果被缓存并在再次出现相同的输入时返回。参见例如 Ward (1993)。Grossman & Zeitman (1988) 发表了一种A(i, n)O(i x A(i,n))时间和O(i)空间内计算的巧妙算法。

于 2021-12-31T20:23:16.157 回答