私は常にサフィックス配列を使用してきました。私はいつもこれが最速の方法だと言われてきたからです。
アルゴリズムが実行されているマシンでメモリが不足している場合は、いつでも配列をハード ドライブ上のファイルに保存できます。アルゴリズムはかなり遅くなりますが、少なくとも結果は得られます。
また、ライブラリが、適切に記述されたクリーンなアルゴリズムよりも優れた仕事をするとは思いません。
LE: ところで、最長の共通部分文字列を見つけるためにデータを削除する必要はありません。
最長共通部分文字列問題から:
function LCSubstr(S[1..m], T[1..n])
L := array(1..m, 1..n)
z := 0
ret := {}
for i := 1..m
for j := 1..n
if S[i] = T[j]
if i = 1 or j = 1
L[i,j] := 1
else
L[i,j] := L[i-1,j-1] + 1
if L[i,j] > z
z := L[i,j]
ret := {}
if L[i,j] = z
ret := ret ∪ {S[i-z+1..i]}
return ret
何もソートする必要はありません。100MB のデータを 1 回解析し、n*m の文字配列を作成してコンピューティングを保存するだけです。こちらのページもチェック
LE: Rabin-Karp はパターン マッチング アルゴリズムです。ここでは必要ありません。