反復対数

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

テンプレート:For

図1 自然対数を反復する反復対数 log*4 の値が 2 であることを示す図。反復対数の値は、入力値 n から区間 [0,1] に到達するまでの間、曲線 y=logx をジグザグに移動することで求められる。ジグザグは点 (n,0) から始め、次に点 (n,logn)、点 (0,logn)、点 (logn,0) といった順番に移動を繰り返していくことで描かれる。

計算機科学において、反復対数テンプレート:Lang-en-short)は、結果が 1 以下となるまでに必要とする対数関数の適用回数である[1]

概要

n についての反復対数は log*n(ログスター n)と表記され、単純には次のように再帰的に定義される。

log*n:={0if n1;1+log*(logn)if n>1

関数の反復を用いれば、次のようにも定義できる。

log*n:=min{i0:log(i)n1}

正の実数においては、連続性のテンプレート:仮リンクに等しい。

log*n=slogn

言い換えれば、b を反復対数の底として、n が区間 (y1b,yb] にあるとき、その反復対数は logb*n=y で表される。ここで yb=bbbyテトレーションである。ただし、負の実数 x について、反復対数の値は log*x=0 であるが、slogx=1 であるので、負の実数においては先に示した関係は成り立たないことになる。

反復対数は実数全体で定義され、非負整数を値域にとる。正の実数に対しては、xy 平面の図1において x 軸上の区間 (0,1] に到達するために必要なジグザグの数として図式的に理解できる。

計算機科学においては、自然対数の代わりに二進対数を反復する反復対数 lg*n:=log2*n も用いられている。数学的には、e2 だけでなく、e1/e1.444667 より大きい任意の底に対してwell-definedである。

アルゴリズム解析

底が 𝟐 の反復対数の値
n lg*n
(,1] 0
(1,2] 1
(2,4] 2
(4,16] 3
(16,65536] 4
(65536,265536] 5
(y12,y2] y

反復対数はアルゴリズム解析計算複雑性理論の分野でよく用いられている。以下に示すアルゴリズムでは、時間計算量テンプレート:仮リンクの限界値が反復対数で表されている。

反復対数の成長は非常に遅く、対数関数よりもはるかに遅い。実装されている実際のアルゴリズムの実行時間を数えるのに十分な n のすべての値(すなわち n2655361019660、この最大値は観測可能な宇宙内の原子数 1080 を優に超える)に対して、底 2 の反復対数の値はたったの 5 以下である。

より高い底の反復対数は、より小さい値を返す。計算の複雑さの分野で使われるものでいえば、逆アッカーマン関数だけである。

他の応用例

反復対数は、テンプレート:仮リンクテンプレート:訳語疑問点で用いられるテンプレート:仮リンクと密接に関係している。加法についてのテンプレート:仮リンク(ある数が数字根に到達するまでに、数字をすべての桁の和で置き換える回数)は、O(log*n) である。

計算複雑性理論において、テンプレート:Lang[5]によれば、計算資源DTIME決定性チューリング機械での計算時間)とNTIME非決定性チューリング機械での計算時間)とが区別できるのは nlog*n までである。

脚注

出典

テンプレート:Reflist

テンプレート:Normdaten