整数のオーダを,入力サイズのオーダに変換する
昨日の続きです.
という離散対数問題において, の候補を0から順に試して解を見つけるという「総当たり法」を実施すると,計算終了までの時間計算量は になる*1のですが,これを入力サイズ の式で表現するのが目的です.これも昨日の復習ですが, とは,, , のそれぞれの2進表現により得られる長さとします.
と の関係について,細かいことを言うといくらでも考えられるのですが,ここでは,「 の2進表現が,, のそれらと比べて非常に大きい場合」と,「, , がそれぞれ近い値である場合」の2点に絞ってみます*2.
まず,「 の2進表現が,, のそれらと比べて非常に大きい場合」ですが,このときは「 の値は, の2進表現の長さで決まる」と考えます.以後,よく「2進表現の長さ」が出てくるので,記号を導入しましょう.整数値 の2進表現の長さを, と書きます.≒です.
ここで ≒≒ を について解くと,≒ となります. に代入すると, となって,したがって時間計算量は入力サイズの指数関数になります.
もう一つのケースは,「, , がそれぞれ近い値である場合」ですね.このときは,≒ と ≒≒ が成り立ちます.ここから と の関係を求めると,≒ となります.
これを に代入すると, です.指数法則を使って「なんとかのn乗」にすると,[tex:O*3,そして という時間計算量も指数オーダと言うことができます.
で,離散対数問題は指数時間ですか?
この表現は誤解を招きますね.問題そのものには,時間などの計算量は付随しません.アルゴリズムを決めれば,その計算量を求めることは当たり前のように行われます.同じ問題でも,計算量が大きいアルゴリズムは「まずい解法」,小さいアルゴリズムは「良い解法」と言えます.
今のところ知られているアルゴリズムの中で,計算量の最も小さい値(たいていはオーダ表記)によって,その問題の難しさを表現することはよくあります.しかしそう捉えるとしても,研究の進歩によってその式が小さくなる可能性がある点には,注意しましょう.
さてこの意味での,離散対数問題の難しさ(計算量)についてですが,離散対数問題の困難性に関する計算量 についての調査・研究報告書 というのを見かけました.数式たくさんですが,有力なアルゴリズムであっても,上記の素数 のサイズに関する準指数時間というのがベストなようです.
準指数時間というのは, に代表される「多項式時間」と, に代表される「指数時間」の間に位置します.これも多項式時間を越えているので,効率がよいとはみなされません.
*1:「」の計算回数で評価しています.実は,この計算に要する手間は に依存するので,より精密に評価するなら,この点にも配慮する必要があります.
*2:なお,, として差し支えありません.というのも, のときは,離散対数の式に照らし合わせると左辺が 未満,右辺が 以上なので,解なしです.また のときは,フェルマーの小定理から, を新たな にすればいいのです.
*3:2^{1/3})^n)] となります.オーダ記法でこのような表現を見ることはなかなかないのですが,定数 が であり,かつ十分大きな を考えるならば, は に関するどんな多項式よりも大きくなるので, だって確かに指数関数((ここで とは,2の立方根のことです.はてなのtex記法では,立方根がうまく表せなかったので,この書き方にしています.