レベンシュタイン距離と動的タイムワープ


7

ワグナー・フィッシャーアルゴリズムとdtwアルゴの間をどのように平行に描くかわかりません。どちらの場合も、各インデックスの組み合わせ(i、j)の距離を求めます。

ワーグナーフィッシャーでは、空の文字列から別の文字列への挿入回数によって距離を開始します。

let wagnerFischer (s: string) (t: string) =
   let m, n = s.Length, t.Length
   let d = Array2D.create (m + 1) (n + 1) 0

   for i = 0 to m do d.[i, 0] <- i
   for j = 0 to n do d.[0, j] <- j    

   for j = 1 to n do
       for i = 1 to m do
          d.[i, j] <- List.min [
                           d.[i-1, j  ] + 1; 
                           d.[i  , j-1] + 1; 
                           d.[i-1, j-1] + if s.[i-1] = t.[j-1] then 0 else 1; ]
   printfn "edit matrix \n %A" d 
   d.[m,n]

DWTでは、+ infinityで境界を開始します。これは、シーケンスの番号を「スキップ」したくないため、常に別のアイテムと一致させたいためです。

DWTとWFアルゴの間で距離を均一に更新するための使用を妨げている変更は、私にはわかりません。DWTでは体系的にコストを追加しますが、WFアルゴでは、さまざまなケースでこの非固有関数を使用します

私は両方のアルゴリズムを理解していますが、コスト関数の更新におけるそれらの違いを結び付けないでください。違いを直感的に理解するためのアイデアはありますか?

let sequencebacktrack (s: 'a seq) (t:'a seq) (cost:'a->'a->double) (boundary:int->double)  =
   let m, n = s |> Seq.length, t |> Seq.length
   let d = Array2D.create (m + 1) (n + 1) 0.

   for i = 0 to m do d.[i, 0] <- boundary(i)
   for j = 0 to n do d.[0, j] <- boundary(j)

   t |> Seq.iteri( fun j tj ->
            s |> Seq.iteri( fun i si -> 
                        d.[1+i, 1+j] <- cost tj si + List.min [d.[1+i-1, 1+j  ]; 
                                                               d.[1+i  , 1+j-1]; 
                                                               d.[1+i-1, 1+j-1]; ] ))
   printfn "edit matrix \n %A" d 
   d.[m,n]
//does not work
let wagnerFischer2 (s: string) (t: string) =
   sequencebacktrack s t (fun a b -> if a = b then 0. else 1.) (id >> double)

let b = wagnerFischer2 "ll" "la"

2
ソースコードを取り除くことで(リンクで十分です)、質問を改善できますが、代わりに、2つのアルゴリズムの違いをより明確に強調する必要があります。彼らは同じ再帰を使用していますが、テーブルを異なる順序で処理していますか?初期化だけが違うのですか?誰もソースコードを解析したくありません。また、両方のアルゴリズムが計算するもの、レベンシュタイン距離を明確にしますか?
A.Schulz

1
DWT = DTW?「ダイナミックタイムワープ」についてはよく知りませんが、紹介の参考資料にリンクしていただけませんか。
ラファエル

1
(参照)David Sankoff、Joseph Kruskal:タイムワープ、文字列編集、および高分子:シーケンス比較の理論と実践。1983年、1999年に再発行
ヘンドリック月

回答:


5

実際には、関連するアルゴリズムがたくさんあります。現代のコンテキストでは、「タイムワープ」はシーケンスアラインメントと呼ばれると思います。完全な文字列に一致させるか、最適な部分文字列に一致させるかによって、Needleman-WunschSmith-Watermanが取得されます。

後者のアルゴリズムでは、コストが変化するように見えます。つまり、文字の削除と挿入、および文字の変更には異なるコストが発生する可能性があります。最初のアルゴリズムでは、考えられる3つの変更すべてに対して、これらのコストをに修正するようです。1

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.