アッカーマン関数

提供: testwiki
ナビゲーションに移動 検索に移動

アッカーマン関数(アッカーマンかんすう、テンプレート:Lang-en-shortテンプレート:Lang-de-short)とは、非負整数 mn に対し、

A(m,n)={n+1, if m=0A(m1,1), if n=0A(m1,A(m,n1)), otherwise

によって定義される関数のことである[1]

与える数が大きくなると爆発的に計算量が大きくなるという特徴があり、性能測定などに用いられることもある。

また、数学的な意味として、原始再帰関数でないμ再帰関数の実例として有名である。

歴史

1920年代後半、数学者ダフィット・ヒルベルトの教導を受けていた学生だったテンプレート:Ill2ヴィルヘルム・アッカーマンは、計算の基礎を研究していた。ヒルベルトは、すべての計算可能関数が 原始再帰的であると仮定していたテンプレート:要出典。簡単に言えば、これは、コンピューターで計算できる各関数をいくつかの非常に単純なルールからまとめて、計算の期間を事前に推定できることを意味する。実際にこれは人々が利用するほとんどの関数に適用出来るが、2人の研究はそれを覆した。

1927年に、スーダンはスーダン関数を発表した。それとは独立に、1928年アッカーマンは自分の生み出した関数 φ を公表する。その関数は3つの引数を必要とし φ(m,n,p) の様に表記された[2]。スーダンとアッカーマンの双方が全域計算可能関数(いくつかの参考文献では単純に "再帰的"と呼ばれる)でありながら原始再帰的でない関数の発見に功績が有ったと信じられている[3]

ヒルベルトはÜber das Unendliche[4]の中でアッカーマン関数が原始再帰的では無いと仮定したが、この仮説は彼の個人秘書となっていたアッカーマンによって実際に証明され、ヒルベルトの執筆した実数の論文上に掲載された[2][5]

2変数形式に単純化されたアッカーマン関数は、1935年テンプレート:Ill2によって開発された[6]

概念

アッカーマンが1928年に発表した3変数の関数は次のような定義である[2]

φ(a,b,0)=a+bφ(a,0,n+1)={n(if n=0,1)a(otherwise)φ(a,b+1,n+1)=φ(a,φ(a,b,n+1),n)

この関数において、φ(a,b,n+1)φ(a,_,n)テンプレート:Mvar 回繰り返すことによって定義されていることがわかる。すなわち、

φ(a,b,0)=a+bφ(a,b,1)=0+a++abtimes=abφ(a,b,2)=1aabtimes=abφ(a,b,3)=aaa(b+1)times

となるように定義されている。

アッカーマン関数の値の表

アッカーマン関数の計算は、無限の表を使った手順に言い換えることができる。まず、一番上の列に自然数を1から順番に並べる。表の値を決めるためは、すぐ左の値を見て、一つ上の列でその順番の値を取る。もし左に数値がない場合は、単に一つ上の列のカラム 1 (n = 1) の数値を取る。

A(m,n) の値
mテンプレート:Backslashn 0 1 2 3 4 n
0 テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math
1 テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math
2 テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math
3 テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math
テンプレート:Math

計算できる範囲で具体的な数値に置き換えていくと、表は次のようになる。

A(m,n) の値
mテンプレート:Backslashn 0 1 2 3 4 n
0 テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math
1 テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math
2 テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math 2n+3=2×(n+3)3
3 テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math テンプレート:Math 2n+33
4 テンプレート:Math テンプレート:Math 2655363 22655363 222655363 2223n + 3 twos
5 テンプレート:Math

222365536 twos

A(4,A(5,1)) A(4,A(5,2)) A(4,A(5,3)) A(4,A(5,n1))

一般の値は非常に大きいが、クヌースの矢印表記コンウェイのチェーン表記ハイパー演算子等を使えば

A(m,n)
=(2m2(n+3))3
=(2(n+3)(m2))3
=hyper(2,m,n+3)3
=hyper𝑚(2,n+3)3

と簡潔に表す事が出来る。

十分にテンプレート:Mvarの値を大きくしたとき、アッカーマン関数の値は急増加関数A(x,a)fω(x)a は定数)と近似できる。

逆アッカーマン関数

自然数テンプレート:Mvarに対してA(m1,m1)<nA(m,m)を満たすようなテンプレート:Mvarを取り、α(n)=mとして関数テンプレート:Mathを定義する。この関数を逆アッカーマン関数という。このとき定義から逆アッカーマン関数は全域かつ上界を持たないが、その値は非常にゆっくりと大きくなる。

ロバート・タージャンの1975年の論文において提唱された素集合データ構造 (Union-Find) の探索および結合アルゴリズムについて、その計算量が O(α(n)) で見積もられた[7]

逆アッカーマン関数は原始再帰関数である。


脚注

テンプレート:Reflist

参考文献

  • Y. Sundblad: The Ackermann Function. A theoretical, computational, and formulamanipulative study. BIT 11, 107–119 (1971)
  • 竹内外史『数学基礎論の世界 ロジックの雑記帳から』日本評論社、1972年、ISBN 4-535-78126-5
  • マイケル・シプサー著、『計算理論の基礎』太田和夫・田中圭介 監訳, 共立出版。原著: "Introduction to the Theory of Computation" (Michael Sipser, Thomson Course Technology)

関連項目

外部リンク

テンプレート:Mathlogic-stub テンプレート:巨大数