C/C++の宿題片付けます 140代目
■ このスレッドは過去ログ倉庫に格納されています
0893デフォルトの名無しさん
2010/10/12(火) 00:55:31[2] 問題文(含コード&リンク):
実行時引数で2つの文字列を与え、レーベンシュタイン距離を動的計画法で求める。
文字列は、英小文字で各10字以内とする。 作業表を出力する。以下のように実行し、作業表も出力する。
EditDist.exe bcabc abdd
0 1 2 3 4 5
1 1 2 2 3 4
2 1 2 3 2 3
3 2 2 3 3 3
4 3 3 3 4 4
距離 : 4
[3] 環境
[3.1] OS: vista
[3.2] コンパイラ名とバージョン: bcc
[3.3] 言語: C言語
[4] 期限: 2010年10月14日
[5] その他の制限:なし
[参考]
レーベンシュタイン距離の効率的な計算には、動的計画法による算法が知られている。作業表を作り、左上から右下へ、
最も操作回数が少なくなるような経路を選んでいく。作業表の各数値は、左上から埋めていく。ある位置の上、左、左上の値を比べ、
最小値をその位置に書き込む。左上端では0とする。さらに、縦と横の文字が一致していなければ1を足す。右下端が求める距離に
なっている。どのような基本操作を行ったかは、右下端から最小となる方向を逆に辿っていけばよい。
右に進むことは、横向きの文字列の先頭文字を削除することに相当する。下に進むことは、縦向きの文字列の先頭文字を削除することに
相当する。右下に進むことは、両方の先頭文字を削除することに相当する。
■ このスレッドは過去ログ倉庫に格納されています