編集距離計算のためのマイクロ最適化:それは有効ですか?


10

ウィキペディア、編集距離のためのボトムアップの動的プログラミングスキームの実装が与えられています。それは完全に定義に従っていません。内部セルはこうして計算されます:

if s[i] = t[j] then  
  d[i, j] := d[i-1, j-1]       // no operation required
else
  d[i, j] := minimum
             (
               d[i-1, j] + 1,  // a deletion
               d[i, j-1] + 1,  // an insertion
               d[i-1, j-1] + 1 // a substitution
             )
}

ご覧のとおり、一致がある場合、アルゴリズムは常に左上隣から値を選択し、一部のメモリアクセス、ALU操作、および比較を保存します。

ただし、削除(または挿入)の結果、値が小さくなる可能性があるため、アルゴリズムはローカルで正しくありません。つまり、最適性の基準に違反しています。しかし、おそらく間違いは最終結果を変えない-それはキャンセルされるかもしれない。

このマイクロ最適化は有効ですか、そしてなぜ(そうではない)のでしょうか?

回答:


6

アルゴリズムに欠陥があるとは思いません。2つの文字列が一致する場合は、最初に最後の2文字を比較します(次に再帰します)。それらが同じである場合、それらを一致させて最適な配置を取得できます。たとえば、文字列testとを考えますtestat。最後tの2つのが一致しない場合、いずれかが一致しないtままになります。それ以外の場合、一致は次のようになります。

ここに画像の説明を入力してください

矢印は「交差」することができないため、これは不可能です。一致tすると、左側に示すように、いくつかの挿入(図では緑色のボックス)が発生します。

ここに画像の説明を入力してください

しかし、次に、右側に描かれている、同等に優れた配置を見つけることができます。どちらの場合もaに一致し、t2つの挿入があります。

最後tのの1つの置換の引数は同じです。したがって、最後tのsの1つを置き換えると、代わりに最後の2つのtを一致させ、より適切な配置を得ることができます(図を参照)。

ここに画像の説明を入力してください


ああ、ボトムアップ問題に対するトップダウンの議論。いいね!
ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.