pattirudonアルゴリズムのオーダー

このアルゴリズムのオーダーを調べます。

つまり、線形な遷移で決まっている疑似乱数で、状態から乱数は足し算で決まっているものとする。 このとき乱数値からseedを復元するアルゴリズムを考える。 ただし、簡単のため一個の乱数で見れるbit長を固定でkとする。

seedの長さをn bitとする。 このときアルゴリズムの計算時間は次の通り。

アルゴリズム 計算時間
愚直なアルゴリズム Θ(2n)
pattirudonアルゴリズム Ω(2n/2)

ただしseedの候補を決めたとき、それが本当にseedかはΘ(1)時間でできるものと仮定する。

ここにΘ(f(n))はちょうどf(n)のオーダー、Ω(f(n))は少なくともf(n)のオーダーを意味する。

説明

何個の乱数を見るかをlとする。最適なlを調べる。

seedから乱数値を決める足し算する前の値を得る写像をf: F_2^n -> F_2^(2kl)とする (1個の乱数ごとに2l bitあることに注意)。 探索しないといけないbit数はkl + dim(Ker f)である。 ここにklは足し算する前の値の片割れのbit数、dim(Ker f)はそれを決めたときのf(x) = aの解空間の次元。

次元公式よりdim(Ker f) = n - dim(Im f) ≦ n - 2klなため、

(探索しないといけないbit数) = kl + dim(Ker f) ≧ kl + max{n - 2kl, 0} = max {n - kl, kl}。

これが最小となるのはl = n / (2k)のときで最小値はn / 2。 よって(n / 2) bitの探索をしなければいけないため、計算量はΩ(2n/2)である。

筆者: oupo (連絡先: oupo.nejiki@gmail.com)