動的計画法-シーケンスアラインメント問題(2)は計算によって保存されます

前書き

前の記事に続いて、2つの文字列S m、T n S_m、T_nについてSメートルTn個、最適な配置を計算します。必要な配列スペースはO(mn)です。最適な位置合わせ方法は、短い文字列を処理するときにメモリに耐えることができますが、処理入力が紙全体のようになると、メモリはそれに耐えることができません。一方、アルゴリズムは2層のforループを使用して2次元配列mxnを計算するため、最終的には余分なコンテンツ(配列のコーナー)を使用できず、無駄になります。

高度な動的計画法

動的計画法は、最適解を得るのに非常に大きな影響を及ぼしますが、多くのストレージスペースと多くの不要な計算を消費します。高度な動的計画法はこの欠点を補い、ストレージスペースと実行時間を節約します。採用の方法は、計算に代わって節約することです。

分割統治はスペースを削減します

以前の配置アルゴリズムでは、現在のグリッドのスコアを計算するたびに、左上隅にある3つのグリッドのコンテンツが考慮され、残りのグリッドは考慮されないことがわかります。実際には、考慮されていません。次元配列のすべてのデータは、次の2つの列にある必要があります:
ここに画像の説明を挿入
最初に、最初の列、最初の要素を計算するときに、0番目の列(配列を使用)を初期化します- 3は直接初期化できます.1番目の青いボックスについては、左上隅の3つの値が取得されており、再帰式に従って直接1が取得され、これに基づいて2番目の青いボックスの計算が実行されます、などのように、最初の2列は計算されたコンテンツです。

2番目の列の内容を計算する場合、0番目の列の内容を保存する必要がなくなったため、最初の列の値が前の配列に保存され、次のように次の計算が実行されます。図:
ここに画像の説明を挿入
最後に配列が保存しますコンテンツには最後の2列しかないため、最終的な回答4が自然に取得されます。

擬似コードは次のとおりです。
ここに画像の説明を挿入
このメソッドに必要なスペースは2nだけですが、パスをバックトラックする場合は、前の計算結果が保存されないため、機能しません。
ここに画像の説明を挿入
Hirschbergのアルゴリズムは、この問題を解決するために分割統治法を追加しました。
計算を使用して保存すること、前から後ろへのマッチング、および後ろから前へのマッチングは同じロジックであることがわかります。
Hirschbergは、分割統治のアイデアを動的計画法に適用しました。多段階の意思決定の観点から考えると、SはTから段階的にどのように出現するのでしょうか。分割統治の考え方を適用すると、Sは2つの部分に分割され、前半はTの前半部分から生成され、後半はTの後半部分から生成されます。式は次のとおりです
。OPT( T、S)= OPT(T [1 .. q]、S [1 .. n 2])+ OPT(T [q + 1 .. m]、S [n 2 + 1 .. n])OPT( T、S)= OPT(T [1..q]、S [1 .. \ frac {n} {2}])+ OPT(T [q + 1..m]、S [\ frac {n} {2} + 1..n])O P T T S =O P T T [ 1 Q ] S [ 1 2n個] +O P T T [ q+1 m ] S [2n個+1 N- ]
パーティションに適用し、その後、我々は、接尾語対は、2つだけの配列を前半、プレフィックスマッチの後半に一致使用し、中間結果を格納することができ、それぞれ、二つの部分に分割Sと考え次のように:
ここに画像の説明を挿入
2つの列の結果を加算して、中央の黄色の列の結果を取得し、前に計算された最高のスコア4が中央で取得されることを確認します。1 +3で得られます。1は「OCUR」と「OCCUR」の類似度、3は「RANCE」と「RENCE」の類似度です。線形加算スコアを使用しているため、1 +3の結果はSとTの類似度です。ちょっと待ってください、4の位置の意味は何ですか?下の写真を見てください
ここに画像の説明を挿入
。4が左右を上下に分割していることがわかります。ここでのRは正確にqの位置です。これから、次のように元の式の最初の除算と征服を取得できます
。OPT( 'OCCURRENCE'、 'OCURRANCE')= OPT( 'OCCUR'、 'OCUR')+ OPT( 'RENCE'、 'RANCE')OPT ( 'OCCURRENCE'、 'OCURRANCE')= OPT( 'OCCUR'、 'OCUR')+ \\ OPT( 'RENCE'、 'RANCE')O P T OCCURRENCEO C U R R A N C E=O P T OCCURO 100 U A+O P T RENCER A N C E
残りは、左上隅の赤い領域と右下隅の赤い領域を再帰的に呼び出すことであり、前の4のような一連の赤いグリッドを取得できます。

では、どのようにして目的のパスを取得しますか?パスを考えるには、まずqの意味を真に理解する必要があります。qはSの前半がTの[1 ... q]から得られることを示します。この例では、「OCUR」は「OCCUR」から来ています。前のパステーブルに戻ります。
ここに画像の説明を挿入
図から、各行の少なくとも1つの要素がパスにあり、qがこの要素が配置されている列を決定していることが簡単にわかります。最初の分割統治法のqは、中央の黄色1の位置を決定し、qの値は5です。これは、元の2次元配列<5、4>がパスにある必要があり、4であることを示しています。の先頭でSを2つに分割することによって決定されます。同様に、再帰するたびにパス内の新しい要素を判別できます。このようにして、パスをゆっくりと決定できます。

擬似コードは次のとおりです。
ここに画像の説明を挿入
上記のアルゴリズムの合計スペース消費量はO(m + n)であり、これは線形ストレージスペースです。時間計算量もO(mn)です。
ここに画像の説明を挿入

分割統治法によるポイントの改善

上記のアルゴリズムは優れていますが、欠点もあります。擬似コードの2行は2行と3行です。ここでの問題は、前から後ろに計算する必要があり、後ろから前に計算することもできます。これは位置合わせの問題で行うことができますが、変更した場合、必ずしも他の問題が原因であるとは限りません。

パスを取得するには、上記の導出によれば、実際には、qを再帰的に計算し、変数R i、j R_ {i、j}を定義するだけで済みますRI J単位(i、j)のどの行が(0,0)からn / 2に戻るかを示すために、次の式があります
ここに画像の説明を挿入
。この再帰式の意味を説明する例を見てください。列n / 2にあり、n / 2列を通過するとき、行はそれ自体の行である必要があり、次の列の要素については、そのOPTの計算結果を考慮する必要があります。
ここに画像の説明を挿入
再帰的に計算する場合、現在の計算の最適な配置を格納するために、常に2つの配列(1つは緑と1つは青)があります。n/ 2 +1列の要素の場合、バックトラック時にどの行にあるかを知りたいと考えています。 。n/ 2列を介して、前方に質問する必要があります。問い合わせの根拠はどこから来たのかです。OPTスコアの比較によると、青いボックスの5は緑のボックスの3から派生していることがはっきりとわかります。同様に、逆方向に更新を続けて、最終結果の列は5です。これは、q = R 10、9 R_ {10,9}を意味します。R1 0 9、このメソッドを使用してqを見つけ、残りは再帰的なプロセスです。再帰計算の例を次に示します。
ここに画像の説明を挿入
再帰呼び出しは、「OCUR」と「OCCUR」の間のqを計算することです。「OC」と「OCC」を計算する場合、qには2つの値があります。これも簡単です。 「OC」は「OCC」と揃えることができ、「OC-」も「OCC」と揃えることができるため、qには2つのオプションがあります。
ここに画像の説明を挿入
以下は、再帰プロセス全体に格納され
ここに画像の説明を挿入
ているパスポイントプロセスであるため、パスポイントセットA =(⟨5,4⟩、⟨3,2⟩、⟨2,1⟩、⟨4,3⟩、⟨7 、6⟩、⟨6,5⟩、⟨8,7⟩、⟨9,8⟩}

総括する

動的計画法で分割統治のアイデアを適用すると、スペースの複雑さを軽減する能力の中核は、算術演算を節約することです。一般的な手順は次のとおりです。

  1. SがTからどのように生成されるかという元の多段階の意思決定問題は、Sの前半がTの最初の部分からどのように生成されるかに変換されます(T [1 ... q]、S [1 ... n / 2] + Tの後半から生成されたSの後半はどうですか(T [q + 1…m]、S [n / 2 + 1…n])
  2. 次に、前部と後部にそれぞれ接尾辞最適配置と接頭辞最適配置を使用し、最後に2つの列の結果を計算し、2つの列の結果と、最大のもの(つまり、前の4つ)の横座標を合計します。 )はqです
  3. qを使用すると、⟨q、n /2⟩(パスが通過する必要のあるポイント)を配列に格納し、1〜2ステップを繰り返すことができ、最終的に取得された配列Aが必要なパスを構成します。

ただし、上記の方法には一定の制限があり、接頭辞の最適な配置と接尾辞の最適な配置の両方を満たす必要があるため、lanのアルゴリズム分割統治法が提案されています。本質的に、パスを見つけることは見つけることです。 qの値なので、彼はOPTを再帰的に使用することを検討し、ポイントセットAも取得します。

おすすめ

転載: blog.csdn.net/qq_32505207/article/details/108043063