トップQs
タイムライン
チャット
視点
アッカーマン関数
ウィキペディアから
Remove ads
アッカーマン関数(アッカーマンかんすう、英: Ackermann function、独: Ackermannfunktion)とは、非負整数 m と n に対し、
与える数が大きくなると爆発的に計算量が大きくなるという特徴があり、性能測定などに用いられることもある。
Remove ads
歴史
1920年代後半、数学者ダフィット・ヒルベルトの教導を受けていた学生だったガブリエル・スーダンとヴィルヘルム・アッカーマンは、計算の基礎を研究していた。ヒルベルトは、すべての計算可能関数が 原始再帰的であると仮定していた[要出典]。簡単に言えば、これは、コンピューターで計算できる各関数をいくつかの非常に単純なルールからまとめて、計算の期間を事前に推定できることを意味する。実際にこれは人々が利用するほとんどの関数に適用出来るが、2人の研究はそれを覆した。
1927年に、スーダンはスーダン関数を発表した。それとは独立に、1928年アッカーマンは自分の生み出した関数 を公表する。その関数は3つの引数を必要とし の様に表記された[2]。スーダンとアッカーマンの双方が全域計算可能関数(いくつかの参考文献では単純に "再帰的"と呼ばれる)でありながら原始再帰的でない関数の発見に功績が有ったと信じられている[3]。
ヒルベルトはÜber das Unendliche[4]の中でアッカーマン関数が原始再帰的では無いと仮定したが、この仮説は彼の個人秘書となっていたアッカーマンによって実際に証明され、ヒルベルトの執筆した実数の論文上に掲載された[2][5]。
Remove ads
概念
要約
視点
アッカーマンが1928年に発表した3変数の関数は次のような定義である[2]:
この関数において、 は を b 回繰り返すことによって定義されていることがわかる。すなわち、
となるように定義されている。
Remove ads
アッカーマン関数の値の表
要約
視点
アッカーマン関数の計算は、無限の表を使った手順に言い換えることができる。まず、一番上の列に自然数を1から順番に並べる。表の値を決めるためは、すぐ左の値を見て、一つ上の列でその順番の値を取る。もし左に数値がない場合は、単に一つ上の列のカラム 1 (n = 1) の数値を取る。
計算できる範囲で具体的な数値に置き換えていくと、表は次のようになる。
一般の値は非常に大きいが、クヌースの矢印表記、コンウェイのチェーン表記、ハイパー演算子等を使えば
と簡潔に表す事が出来る。
十分にxの値を大きくしたとき、アッカーマン関数の値は急増加関数のひとつであるウェイナー階層で( は定数)と近似できる。
Remove ads
逆アッカーマン関数
自然数nに対してを満たすようなmを取り、として関数αを定義する。この関数を逆アッカーマン関数という。このとき定義から逆アッカーマン関数は全域かつ上界を持たないが、その値は非常にゆっくりと大きくなる。
ロバート・タージャンの1975年の論文において提唱された素集合データ構造 (Union-Find) の探索および結合アルゴリズムについて、その計算量が で見積もられた[7]。
逆アッカーマン関数は原始再帰関数である。
Remove ads
脚注
参考文献
関連項目
外部リンク
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads