この記事ではbaby-step giant-stepの「気持ち」を説明します。
アルゴリズムの説明のみであり、実装については一切説明していません。
○baby-step giant-step algorithmとは
有限アーベル群上の離散対数問題を高速に解くアルゴリズム
平方分割でやる
○正確に
有限アーベル群の台集合*1に全順序が定まる*2とする。
群の演算と順序の比較がでできるとする。
が与えられたとき、を満たす最小のをで求めることができる。
○アルゴリズム
とおく。
最初になるに対してペアを計算しておき、第二要素をキーにしてソートする。
ここで数を決めたとき、★「となるがあるかどうか(あるなら最小のものを求める)」という問題を考える。
これは「となるがあるかどうか」なので、最初に計算した配列上で二分探索することでで解くことができる。
としてを順に考えることで、★の問題を回解くことにより元の問題に答えることができる。(もとの問題の答えは未満なので)
全体でであるから、とすることでになる。
○例
上の離散対数問題
を満たすを求めよ
・の元をと同一視して順序を定める。
・についてを計算する
(0,1),(1,5),(2,8),(3,6)→ソート→(0,1),(1,5),(3,6),(2,8)
・となるものを探す→ない
・となるものを探す→ない
・となるものを探す→(1,5)が見つかる→答えは1+8=9