Ackermann函数是计算机科学中常出现的函数,本文将Ackermann函数相关整理如下:
定义:
A(1, j ) = 2j, j>=1
A( i, 1) = A( i-1, 2) , i>=2
A( i, j ) = A( i-1, A( i, j-1) ), i, j >=1
A(0, x) = 2*x , x>=0
A( i, 0) = 1, i>=1
简单的递归实现:
int A(int i,int j)
{
if(i>=1&&j>=1) return A(i-1,A(i,j-1));
else if(i>=1&&j==0) return 1;
else if(i==0&&j>=1) return 2*j;
else if(i>=0&&j==-1) return 0;
}
Ackermann函数的逆:
the row inverse of A is
a(i,n)= min { j>=0|A( i, j) > n } , i,n >=0
the functional inverse of A is
α(M,N)= min { i>=1|A( i, ⌊M/N⌋) > log N }
α(M,N)= min { i>=1| a(i,N)<= 4⌈M/N⌉}
单变量逆Ackermann函数有时写成log * N,它是N的直到N<=1时取对数的次数
or
α(M,N)= min { i>=1|A( i, 4⌈M/N⌉) >= N } ,m>=0,n>=1(tips:⌈0⌉的值取1)
注意到α(0,n)= α(1,n)
定理:
1.a(i,A(i+1,x+1))= A(i+1,x), i,n >=0
2.let n >= 1 and let f1 and f2 be such that
α(f2+1,n)= α(f2,n)-1 = α(f1+1,n)-1 = α(f1,n)-2
Then f2>=3f1>=3n
3.let n >= 1 and f >= 0
Then α(f,n)< α(0,n)=> f>n ^ 8f>=na(α(f,n),n)
4.let i>= 2 n>=0
Then a(i,n) >=5 =>a(i,n)<1/3 * a(i-1, n)