2つの文字列s
とt
が指定されています。私はs
の各部分文字列をt
に編集距離(Levenshtein距離)で見つける必要があります。実際には、それぞれi
の位置をs
に知っておく必要があります。位置で開始されたすべての部分文字列の最小編集距離はどれくらいですか?例えばすべての部分文字列に対する編集距離を求めるアルゴリズム
:
t = "ab"
s = "sdabcb"
そして、私のようなものを取得する必要があります:
{2,1,0,2,2}
説明:
1st position:
distance("ab", "sd") = 4 (2*subst)
distance("ab", "sda") = 3(2*delete + insert)
distance("ab", "sdab") = 2 (2 * delete)
distance("ab", "sdabc") = 3 (3 * delete)
distance("ab", "sdabcb") = 4 (4 * delete)
So, minimum is 2
2nd position:
distance("ab", "da") = 2 (delete + insert)
distance("ab", "dab") = 1 (delete)
distance("ab", "dabc") = 2 (2*delete)
....
So, minimum is 1
3th position:
distance("ab", "ab") = 0
...
minimum is 0
などを。
私はもちろん、ブルートフォースアルゴリズムを使用してこのタスクを解決することができます。しかし、より高速なアルゴリズムはありますか?
ありがとうございました。
隣接する数字が最大で1つだけ異なる可能性があるので、あなたの答えは{{2,1、** 0,2 **、2} 'が間違っていることを知っています:もし部分文字列[i..j最初の編集操作を行うことによって、部分文字列s [(i + 1).. j] 'は、最大でk + 1のコストとtをマッチングさせることができる文字列の先頭に 's [i]'を挿入します。あなたの例では、4番目の位置では 'distance(" ab "、" b ")= 1(1 insert)、5番目の距離(" ab "、" cb ")= 1" 。 –