短いシーケンスの編集距離の効率的なアルゴリズム


7

文字列のペア間の何十億ものレーベンシュタイン距離を計算する必要があるアプリケーションがあります。文字列は短い(長さが70)DNAシーケンスで、4文字のみで構成されています。また、文字列の1つが固定されていると仮定することもできます。つまり、1つの固定文字列を10億の他の文字列と比較しています。

レーベンシュタイン距離の動的プログラミングの実装はであることを知っています。改善の余地があるかどうか知りたいのですが。私はこれらの2つのアルゴリズムを見つけました:O(mn)

  • O(n+d2)アルゴリズムはBerghelらによる編集距離 です。しかし、私はが小さいと仮定することはできないので、何の利点もないかもしれませんdd
  • log(n)O(1/ϵ)Andoni et alによる時間での 近似。しかし、私はこれに関して2つの懸念があります。 n1+ϵ
    • このアルゴリズムも実際には高速ですか?
    • んの最悪の場合には、計算の編集距離があることを意味倍実際のもの?その場合は多すぎます。log(n)O(1/ϵ)log(n)O(1/ϵ)

適用できる他のアルゴリズム/アイデア/アプローチを知っていますか?


2
レーベンシュタイン・オートマトンを見たことがありますか?
adrianN 2017

それは正確にレーベンシュタイン距離でなければなりませんか、それとも比較的一貫した編集距離で十分ですか?
PAL GD

編集距離が特定のしきい値を下回っている場合にのみ、編集距離に関心がありますか(たとえば、編集距離が場合、正確な編集距離が何であるかは問題ではありません。それがで十分であることがわかっています)?>20>20
DW

DNAは本当にレーベンシュタインに似ていますか?11対00はレーベンシュタインでは2ですが、10対01は1だけです。DNAが一致するかどうかに本当に驚かれるかどうかが問題です。
パパラッツォ2017

@PålGDレーベンシュタイン距離の良い近似も良いかもしれません。
Ameer Jewdaki 2017

回答:


3

1つのアプローチは、固定文字列のレーベンシュタインオートマトンを構築することです(たとえば、こちらを参照)。文字列と距離を指定すると、から距離すべての文字列を認識するDFAを構築できます。したがって、時間で文字列がに近いかどうかをテストできますは文字列の長さです。DFAを格納するためのスペース要件はわかりません(それらはで線形ですが、では指数関数的かもしれません)。xDDxxO(n)nm,nD

または、編集距離を計算するために「早期」アルゴリズムを使用することもできます。編集距離がしきい値未満の場合にのみ興味があると述べました。実行時間がである編集距離を計算するための「早期」アルゴリズムがあり、編集距離がか、そうでない場合は「大きすぎる」と出力します。場合。基本的に、編集距離に対して標準の動的プログラミングアルゴリズムを実行しますが、計算するのは対角線から離れている行列の要素のみです。あなたの場合、これは他の選択肢よりも良いかもしれませんし、そうでないかもしれません。DO(max(n,m)×D)D>DD


-1

数十億を実行する必要があり、4文字しかなかった場合、文字を
1000
0100
0010
0001 として表し
ます。これは35バイトの整数です。

ビットごとにドットを付けandて1を数える

完璧ではありませんが、CPUを大量に投入しない限り、数十億は多くなります。


1
実際には、合計で数兆の距離通話ですが、私はコンピューティングクラスタにアクセスできます。問題は、2つの文字列の長さが100で、挿入または削除が複数ある場合、ドット積が実際の距離からずれるということです。
Ameer Jewdaki 2017

長さ70度でした。言葉に基づいたアルゴリズムがDNAに適用されることに驚いています。科学的なDNAマッチング方程式です。これらのいずれも使用していないことに驚いています。
パパラッツォ2017

文句はないが、DVは私がここでより良い貢献者になるのを助けません。
パパラッツォ2017

私は答えに反対票を投じなかった。実際、私はそれは一般的には良いアプローチだと思いますが、ここでは挿入/削除のために遠すぎます。
Ameer Jewdaki 2017

はい、2つのDNA配列間の距離を定義する確率的な方法はありますが、編集距離よりも計算が簡単な方法はありません。したがって、ここでは「単純な」測定から始めています
Ameer Jewdaki
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.