最近、suffix配列を使用していて、理解しやすいsuffix配列を作成するための効率的なアルゴリズムを見つけることができません。多くのサイトでアルゴリズムがあることを見てきましたが、多くの重要な詳細が省略されているため、理解できません。Top Coderに例があります。
誰かが私に理解しやすいサフィックス配列構築のための効率的なアルゴリズムを紹介してくれませんか?
最近、suffix配列を使用していて、理解しやすいsuffix配列を作成するための効率的なアルゴリズムを見つけることができません。多くのサイトでアルゴリズムがあることを見てきましたが、多くの重要な詳細が省略されているため、理解できません。Top Coderに例があります。
誰かが私に理解しやすいサフィックス配列構築のための効率的なアルゴリズムを紹介してくれませんか?
回答:
DC-3アルゴリズムを使用すると、線形時間でサフィックス配列を計算できます。これは、50行の読み取り可能なC ++コードで実装できる非常にクールなファンシーアルゴリズムです。ソースコードは元の論文に含まれています。2つの文字を一定時間で比較でき、アルファベットサイズが場合、DC3アルゴリズムは時間で実行されます。
suffix-arrayとLCP-arrayにアクセスできる場合は、線形時間でsuffix-treeを取得することもできます。LCPアレイはまた、DC3アルゴリズムを用いて構築することができます。
アルゴリズムの適切な説明は次のとおりです:http : //www.stanford.edu/class/cs97si/suffix-array.pdf。実際には、線形時間ソートを使用することにより、同じアプローチで時間の複雑さが得られます。
それについて具体的な質問がある場合は、質問してください。
DC-3が超クールだというA.シュルツに同意します。これもそれほど複雑ではありませんが、方が簡単です。