私は動的プログラミングを使って何かを解決しようとしていますが、何か問題があります。私が動的プログラミングに取り組むとき、私は通常再帰的アルゴリズムを決定し、そこでそこから私の動的ソリューションに進みます。 m、nは、そのようなことn.lengthがm.lengthより大きく、nは文字「#が含まれていません:私は問題距離を編集してひねります
トラブル
を抱えているこの時間は、次の2つの文字列を持っていると言います' mを最小コストで文字列nと同じ長さにする文字列が必要です。
コストはSUM(Penalty(m [i]、n [i]))として定義されます。ここで、iは文字列char配列のインデックスにあります。
ペナルティは以下のように定義されるような
private static int penalty(char x,char y) {
if (x==y) { return 0;}
else if (y=='#') { return 4;}
else { return 2;}
}
次のように私が考えることができる唯一の方法である:
[0]の場合、mおよびnは、同じ長さ、リターンmは
[います1]任意のインデックスに#を挿入するコストを計算する
[2]最小コストを持つ文字列を決定する。その文字列をm 'とする。
[3] m'とnのアルゴリズムをもう一度実行する。
これは最適な再帰アルゴリズムではないと私は考えています。これは、私が動的アルゴリズムの正しい軌道にないと信じさせてくれます。
通常の編集距離にm.length x n.length行列を使用して読んだことがありますが、私のアルゴリズムに合うように簡単に変形する方法はわかりません。
私の再帰アルゴリズムの考え方と、ダイナミックソリューションに到達するために必要なステップは何ですか?