SACAs(Suffix Array Construction Algorithms)

先日のnlp2010で岡野原さんが紹介されていたSAISの論文を調査中。

Two Efficient Algorithms for Linear Suffix Array Construction

まだ全部理解していないのだが、Introductionに書いてあったSACAs(Suffix Array Construction Algorithms)というのが面白かったのでメモ。


SACAsというのは特にそういうアルゴリズムがあるのではなく、SuffixArrayの構築に関するアルゴリズムの総称らしい。Compressed Suffix Arrayは最終的なインデックスサイズを圧縮する方法だったので、SACAsとは異なる(たぶん)。
同論文によるとSACAsで代表的なのはKSとKAの2種類だとか。どちらも分割統治によって部分的にSuffixArrayを作ってマージする方法。KSは固定長に分割するので仕組みが簡単。一回の分割でサイズが2/3になる。KAは可変長に分割するため複雑な反面、分割によってサイズが1/2になるため時間・空間の効率が良いことが期待できる。
で、本論文は上記の2手法よりも時間・空間両方で効率のよい手法を考えましたよ、というものらしい。面白そう。(しかもC++コードで100行とか。すごい)

このあたりの話は岡野原さんが非常に詳しいので↓も併せて読んでおきたいところ。というか先に読んだ方がいいのかも。

http://homepage3.nifty.com/DO/suffix_array.htm

余談だが、こういうのもあるみたい。こっちも読まないと。

Compressed Suffix Arrays for Massive Data