リスト間のレーベンシュタイン距離編集距離はよく研究された問題です。しかし、各リストで要素が複数回出現しないことがわかっている場合、可能な改善についてはあまり見つけることができません 。
また、要素が比較可能/ソート可能であると仮定します(ただし、比較するリストは最初からソートされていません)。
より正式には、
与えられた2つの文字列間の編集距離は 文字が繰り返されないという約束で、どの程度効率的に計算でき ますか?
は非常に大きなアルファベットです。
リスト間のレーベンシュタイン距離編集距離はよく研究された問題です。しかし、各リストで要素が複数回出現しないことがわかっている場合、可能な改善についてはあまり見つけることができません 。
また、要素が比較可能/ソート可能であると仮定します(ただし、比較するリストは最初からソートされていません)。
より正式には、
与えられた2つの文字列間の編集距離は 文字が繰り返されないという約束で、どの程度効率的に計算でき ますか?
は非常に大きなアルファベットです。
回答:
TL; DR:文字列の両方(または1つだけ)が一意の文字を持っている場合、個々の文字のみを挿入および削除できるわずかに制限的な種類の編集距離を線形時間で計算できます。これにより、レーベンシュタイン編集距離の上限と下限がわかりやすくなります。
レーベンシュタインの編集距離は、1文字の挿入、削除、および置換を許可し、それぞれにコスト1を割り当てます。挿入と削除のみに制限すると、同様の距離測定が得られます。挿入と削除を使用して模倣する)。このより制限的な編集距離の標準的な名前は知らないので、「編集距離の挿入/削除」と呼びます。これは、長さmおよびnの 2つの文字列がそれぞれ与えられ、両方に現れる最長サブシーケンスの長さを知りたい、最長共通サブシーケンス(LCS)問題に密接に対応します。 2つの文字列にLCS Lがある場合、次に挿入/削除編集距離ます:これを確認する最も簡単な方法は、LCSの文字が互いの上に積み重なるように文字列を揃え、LCSにない文字がa -
ギャップ文字。最初の文字列を編集して2 -
行目にできることは明らかです。最初の行にある場合は挿入を-
行い、下の行にある場合は削除を行います。例えば:
-C-IRC-LE
T-RI-CKLE
ここでのLCS CIRCLE
とTRICKLE
、ICLE
長さ4を有し、編集距離は確かにある。
この迂回の理由は、少なくとも1つのシーケンスに個別の文字のみが含まれている場合、LCS(および挿入/削除編集距離)を計算する非常に効率的な方法があるためです:この場合、LCS問題は時間O (n log n )で解くことができる、最も長く増加するサブシーケンスを見つける問題。2つの文字列AとBが与えられ、文字列Aには異なる文字が含まれているとします。Aの最初の文字の名前を1に、2番目の文字を2に、というように変更して、テーブル内の各文字に割り当てた番号を追跡できます。その後、B、このテーブルを使用して文字の名前を変更します(つまり、最初の文字が出現するたびA
に1に変更されます)。最後に、で最も長く増加するサブシーケンスを探しますB
。間のLCSこれは対応A
してB
、そこから私たちはすぐに挿入/削除の編集距離を計算することができます。AおよびBの長さがそれぞれnおよびmである場合、必要な合計時間はです。
挿入/削除距離は、レーベンシュタイン距離の上限を明確に提供します(挿入/削除距離での編集操作の有効なシーケンスは、レーベンシュタイン編集操作の有効なシーケンスでもあるため)。挿入/削除編集距離を2で割ると、下限が得られます。最悪の場合、レーベンシュタインの編集操作を2つの挿入/削除編集操作に変更できるためです。
diff
diff
ハント、J .; Szymanski、T.(1977)、「最長共通部分列を計算するための高速アルゴリズム」、ACMの通信、20(5):350–353、doi:10.1145 / 359581.359603