FLAGS

MENU

NOTICE

2008年7月15日火曜日

(難解メモですんません) 差分を求めるアルゴリズム (mixi05-u459989-200807150201)

ミクシ内で書かれた旧おかあつ日記を紹介します。
(難解メモですんません) 差分を求めるアルゴリズム
2008年07月15日02:01
差分アルゴリズム
http://en.wikipedia.org/wiki/Diff
http://en.wikipedia.org/wiki/Longest_common_subsequence_problem

こういう差分を求める問題のことを LCS(Longest Common Subsequence)を求めるとか、 編集距離とかリーヴェンシュタイン距離を求めるとか言うらしい。

一番簡単なアルゴリズムは WIKIでも説明されているように、2つのデータの各要素を総当りで比較していく方法があるようだ。これは入力データの量に対して二次関数的に処理時間がかかるようになるのだそうで、あまり効率がよくないらしい。 (日本語のwikiには『とても効率がよい』 と書いてあるが、よほどのハイスペックマシンを使っている方が書いたに違いない。)

処理結果も、入力データが m と n と二つあったら、 m×n だけ領域が必要になるらしい。 つまり1ギガのデータ2つの差分を取ると、1エクサ=100京バイト=1000,000,000ギガの領域が必要になるということになる。私事で恐縮だが、僕はマルチメディア用のファイルをジャーナルするのが目的で調べているので、これでは使い物にならない。

調べたら、既にこれを改善したアルゴリズムを考えて論文を書いた人がいるらしい。

解説
http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Dynamic/Hirsch/

Hirschbergの論文
http://www.cs.zju.edu.cn/people/yedeshi/Alinearspace-p341-hirschberg.pdf
※ この大学、人の論文をこんな勝手に転載してしまって、いいんだろうか。 おかげで助かったけど...。

Hirschberg
http://en.wikipedia.org/wiki/Dan_Hirschberg

まだちゃんと読んでない。 再帰的なロジックらしく、よく読んでみる必要がありそうだ。


で、面白いのが、上の monash.edu.au のページは、JavaScript で Hirschberg のアルゴリズムを実装しているのだ。 これはとても興味深く、とても参考になりそうだ。


コメント一覧
 
出展 2008年07月15日02:01 『(難解メモですんません) 差分を求めるアルゴリズム』

著者オカアツシについて


小学生の頃からプログラミングが趣味。都内でジャズギタリストからプログラマに転身。プログラマをやめて、ラオス国境周辺で語学武者修行。12年に渡る辺境での放浪生活から生還し、都内でジャズギタリストとしてリベンジ中 ─── そういう僕が気付いた『言語と音楽』の不思議な関係についてご紹介します。

特技は、即興演奏・作曲家・エッセイスト・言語研究者・コンピュータープログラマ・話せる言語・ラオ語・タイ語(東北イサーン方言)・中国語・英語/使えるシステム/PostgreSQL 15 / React.js / Node.js 等々




おかあつ日記メニューバーをリセット


©2022 オカアツシ ALL RIGHT RESERVED