現在のsetpsの値だけでなく、取られたアクション(挿入、置換、削除またはマッチ)でmartixを生成するために、既存のjavascript levenstein距離計算ソースコードを改良しようとしています。 ) Levenstein距離アルゴリズムの実装におけるアクションマトリックスの埋め込み
は、私が "アクション" マトリックスに間違った結果を得る:アルゴリズムでは、我々はjsのを見ている(いない、ウィキペディアから):
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
)
だから私のJSコードで、私は次のようにします。
// Step 6
d[i][j] = Minimum(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost);
// a deletion
if(d[i][j] == d[i - 1][j] + 1) {
actions[i][j] = 'D';
}
// a insertion
if(d[i][j] == d[i][j - 1] + 1) {
actions[i][j] = 'I';
}
// a substitution
if(d[i][j] == d[i - 1][j - 1] + cost) {
actions[i][j] = 'R';
}
d
行列(2次元配列)の値のためであり、それがのは、正しい値で読み込まれます。 しかし、対応するactions
行列が、論理的にどのようなアルゴリズムで表示されないのか?
「I」、「R」、「D」の割り当てに関して、私は間違って何をしていますか?それとも、それは正解で、ちょうど私には論理的ではないように思えます。なぜなら、私が前例のないシナリオで考えたので、挿入は第2ステップで行われるからです。
ところで、Levensteinアルゴリズムの場合、このような「アクション」マトリックスを生成するのは実際には賢明ですか?
は、時間を割いて、私のためにそれを壊してくれてありがとう。私はそれを考えなければならないかもしれませんし、たぶん明確にするために質問にコメントするつもりです。 –
例えば、私は、左下のコアナーから最終的な行列をどのようにトレースするのか理解しています。調整された上向きの値を探しますが、これを達成するためにどのように「アクション」を再構築できますか?計算が完了した後、彼らはどのように関連しますか? –
確かに、Levensteinと類似のアルゴリズムは、慣れて頭を包み込むまでに時間がかかります。あなたが質問を読んだ後に気づいた、私が逃したことは、読んだときに '(0,0)'から行列をトレースしているようです。これは良い方法のように見えるかもしれませんが、うまくいきません。パスを再構成する唯一の方法は '(3,5)'(またはあなたの最終コーナーが何であれ)からスキャンすることです。 – LiKao