レーベンシュタイン編集距離の最適な文字列配置を計算するためのスペースの複雑さ


12

サイズn1つの文字列が与えられた場合n2、標準的なレーベンシュタイン編集距離の計算は、時間の複雑さO(n1n2)と空間の複雑さ動的アルゴリズムによるものO(n1n2)です。(いくつかの改善が編集距離の関数として行うことができるd、我々はには何の仮定作るんdO(max(n1,n2))

ただし、最適な編集スクリプトの実際の編集を取得する場合、メモリ使用量よりも、実行時間を犠牲にして実行することは可能ですか?O(n1n2)

回答:


15

ユヴァルが示唆するトレードオフの必要はありません。Dan Hirschbergが最初に説明した動的プログラミングと分割統治の混合を使用して、最適な編集シーケンス全体を時間とO n + m 空間で計算できます。(。最大の共通のサブシーケンスを計算するための線形空間アルゴリズム。COMMUN ACM 18(6):341-343、1975)O(nm)O(n+m

直感的に、Hirschbergのアイデアは、最適な編集シーケンスの途中で1つの編集操作を計算し、その後シーケンスの2つの半分を再帰的に計算することです。最適化された編集シーケンスをメモ化テーブルの1つのコーナーから別のコーナーへのパスと考える場合、このパスがテーブルの中央の行と交差する場所を記録するために修正された繰り返しが必要です。動作する1つの再発は次のとおりです。

Half(i,j)={if i<m/2jif i=m/2Half(i1,j)if i>m/2 and Edit(i,j)=Edit(i1,j)+1Half(i,j1)if i>m/2 and Edit(i,j)=Edit(i,j1)+1Half(i1,j1)otherwise

Half(i,j)Edit(i,j)O(mn)Edit(m,n)Half(m,n)O(m+n)

ここに画像の説明を入力してください

A[1..m]B[1..n]A[1..m/2]B[1..Half(m,n)]A[m/2+1..m]B[Half(m,n)+1..n]

T(m,n)={O(n)if m1O(m)if n1O(mn)+maxh(T(m/2,h)+T(m/2,nh))otherwise
T(m,n)=O(mn)O(m+n)

5
ダンが資格試験で私に尋ねたときに私はこれを見逃したので、それが理由です。
ジェフ

私は(ガイド付き)の練習としてこれを持つと、それはかなりクールだった思考を覚えて
Sashoニコロフ

3

空間で実行する、説明するアルゴリズム On1+n2実際に最終編集と最終編集の直前の状態を回復します。このアルゴリズムを実行するとOn1+n2実行時間の増加を犠牲にして、編集シーケンス全体を回復できます。一般に、その時点で保持する行数によって制御される時間と空間のトレードオフがあります。このトレードオフの2つの極端なポイントはスペースですOn1n2 とスペース On1+n2、およびこれらの間で、時間と空間の積は一定です(最大Oまで)。

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