Compressed Suffix Arrayの解説(2) -SAの計算量-
< Compressed Suffix Arrayの解説(1) -Suffix Array- < | > Compressed Suffix Arrayの解説(3) -圧縮の方針- >
================================================
Suffix Arrayの計算量について解説。
計算量には空間計算量、時間計算量の2種類がある。
空間計算量とは、あるデータ構造を保持するのに必要となるメモリ、ディスクの大きさを表す。
時間計算量とは、あるアルゴリズムがデータを処理するのにかかる時間を表す。
計算量はデータ数などの関数として表現され、たとえばデータ数がNのとき
O(N) O(NlogN) O(N^2)
などと表される。動かすマシンの性能ではなく、単純にデータ数が非常に大ききなった場合のデータ構造、アルゴリズムの性能を検討する際に計算量の考え方が用いられる。
まずは空間計算量の話から。
たとえば1文字1byte(8bit)とした場合、N文字のテキストを保持するのに必要なbit数は8Nbit。
ちょっと書き換えると文字種として256種類を取りうる文字を1文字保持するのに必要なbit数は2を底として
log256bit = log(2^8) = 8bit
一般化して、取りうる文字の集合をΣとすると文字の種類は|Σ|なので
log|Σ| bit
必要ということ。
従って、N文字のテキストを保持するのに必要な空間計算量はO(Nlog|Σ|)となる。
一方、Suffix Arrayのインデックスについて、各インデックスは、それぞれの部分文字列の出現位置なのでテキストのサイズがNならインデックスとして取りうる値は1からNの整数。つまり文字の種類は|Σ|=N種類となる。従って空間計算量は
O(NlogN)
となる。
よってSuffix Arrayを用いたキー検索をする場合
O(Nlog|Σ|) + O(NlogN)
だけメモリが必要となる。
ちなみにCompressed Suffix Arrayはインデックスに対する空間計算量O(NlogN)を圧縮し、大雑把に言ってO(Nlog(logN))でインデックスを保持できるようになっている。
最後に時間計算量についてだが、これはN個要素をもつインデックスを単純に二分探索しているだけなので
O(logN)
となる。
ということで今回はここまで。
次回はCSAの解説に入る。
================================================< Compressed Suffix Arrayの解説(1) -Suffix Array- < | > Compressed Suffix Arrayの解説(3) -圧縮の方針- >