読者です 読者をやめる 読者になる 読者になる

diffの高速化

プログラミング

Unified Formatで表示できるところまで来たのはいいけど、
六千行ほどのファイルに適用したら、表示されるのに20秒以上かかってしまって
使い物にならないので、そのへんをちょこちょこと直す。
編集距離を求める処理自体はO(NP)だから速いんだけど、
肝心のSESの経路を記録する部分がかなりお粗末なのが原因だった。
まだかなり改善の余地はあるだろうけど、
それなりにマシな速度で動くようにはなった。

# 単純にtimeコマンドで計測
./unidiff a.txt b.txt  0.12s user 0.08s system 62% cpu 0.318 total


各ファイルの行数と2つのファイルの差分における追加と削除の数は以下の通り。
あと環境はMacOSX10.5.4、GCC4.3.2で、コンパイルオプションにはO2を指定。

ファイル名と行数 追加 削除
a.txt:6351 b.txt:6463 1426 1314


比較対象としてGNU diffutilsのdiffで実行すると、

diff -u a.txt b.txt  0.01s user 0.02s system 22% cpu 0.151 total


う〜む、倍近い差がある。