動的計画法-配列アラインメントの問題(1)最適なアラインメント

前書き

配列アラインメントは、遺伝子配列などのバイオインフォマティクスの最も基本的な概念です。
ほとんどのデータ分析および分析戦略では、組合が入手した情報を使用する必要があります。

たとえば、入力方法のシナリオでは、ユーザーが入力した単語S(間違って入力されている可能性があります)である辞書シソーラスがあります。辞書シソーラスで最も類似した単語をできるだけ早く見つけて、ユーザーの単語を修正する必要があります。入力。

問題

問題の説明

2つの文字列シーケンスS = S 1 S 2 ... S n、T = T 1 T 2 ... T n、S = S_1S_2 ... S_n、T = T_1T_2 ... T_n、S=S1S2Sn個T=T1T2Tn個編集操作の数s(S '、T')を最小限に抑えるために、配置(S '、T')を計算します。

問題分析

整列された文字列に変換できます。2つの文字列TとSについて、文字列の対応する各位置に次の要素を定義します。これは、この方法で同じ長さに入力できるためです。
ここに画像の説明を挿入

  • S '[i] ='-':S [i]はT [i]より1文字小さい、削除と呼ばれます
  • T '[i] ='-':S' [i]はT [i]より1文字多く、挿入と呼ばれます
  • S [i]とT [i]は同じ位置要素を持ち、これはマッチングと呼ばれます

長さが等しくなった後、2つの文字列間の類似性を簡単に計算でき(配置に必要な操作が少ない場合、理論上の類似性は高くなります)、次の漸化式を作成できます。ここで、s(T '、S')はpreです。 -定義されたスコア関数、ここに一致スコア+ 1があります。一致がない場合、スコアが差し引かれ、文字が欠落しているか余分な文字があります。この重大度は間違った文字よりも大きいと考えられるため、ここでは一時的に間違った入力を規定しています-1、省略および不要-3。

OPT(i、j)=max⁡{s(T i、S j)+ OPT(i − 1、j − 1); s( ′−′、S j)+ OPT(i、j − 1); s(T i、 ′−′)+ OPT(i − 1、j)OPT(i、j)= \ max \ begin {cases} s(T_i、S_j)+ OPT(i-1、j-1); \ text {} \\ s( '-'、S_j)+ OPT(i、j-1); \ text {} \\ s(T_i、 '-')+ OPT(i-1、j)\ end {ケース}O P T i j =最大s TSJ)。+O P T i1 j1 ;s SJ)。+O P T i j1 ;s T+O P T i1 J

これを行うと、複数のアラインメントスキームがあることがわかります。元の問題は、最適なアラインメントスキームを見つける方法に変換されます(つまり、s(T '、S')スコアを最高にします)。

ソリューション

動的配列を使用して、現在の最適な状況を保存し、決定を絶えず更新し、現在の状態で次善の策を見つけます。

たとえば、
ここに画像の説明を挿入
最初に0行と0列を初期化し、最初にこの2次元配列の意味を説明し、例として赤い円-9の位置を取ります。これは、OPT( ""、 "OCU")を表します。 、Tは空で、Sは "OCU" "です。Tが空であるため、Sの各値はスペースにのみ配置でき、スペースに配置すると-3、最終スコアは-9になります。行0と列0の要素を計算できます。これらはスペースでのみ整列できるため、すべて-3の倍数になります。次に、前の漸化式に基づいて計算できます。
たとえば、右下隅でmax {3 + 1,0-3,0-3} = 4であるため、最高のアライメントスコアである4を取得できます。
max⁡{1+ OPT( "OCCURRENC"、 "OCURRANC")− 3 + OPT( "OCCURRENC"、 "OCURRANCE")− 3 + OPT( "OCCURRENCE"、 "OCCURRANC")\ max \ begin {cases} 1+ OPT( "OCCURRENC"、 "OCURRANC")\\ -3 + OPT( "OCCURRENC"、 "OCURRANCE")\\ -3 + OPT( "OCCURRENCE"、 "OCCURRANC")\ end {cases}最大1+O P T " O C C U R R E N C " " O C U R R A N C " 3+O P T " O C C U R R E N C " " O C U R R A N C E " 3+O P T " O C C U R R E N C E " " O C C U R R A N C "
ここに画像の説明を挿入
擬似コードは次のとおりです。
ここに画像の説明を挿入
実際の位置合わせスキームが何であるか、つまり、右下隅から左上隅へのパスを知るため(このパスは、S 'とT'がどのように生成されるかを示します)。

このプロセスは、遡及的な方法で解決できます。4から始めることを検討してください。これは、左上隅の3つのグリッドにスコアを追加することで得られます。その後、4からスコアを簡単に差し引いて元のグリッドに戻り、実際のスコアと同じかどうかを確認できます。グリッド。同じ場合は、4がこのグリッドからのものであることを意味します。次の図の例は、4-1 = 3のみが可能であることを示しているため、3からです。
ここに画像の説明を挿入

最適な問題は最善ですか?

実際のアプリケーションでは、必ずしも最適な計画に従ってバックトラックする必要はありません。スコアに基づいて各決定方向の確率を設定し、確率に基づいてランダムにバックトラックします。この方法で見つかったソリューションは、必ずしも最適なソリューションではありませんが、優れた(最適ではない)ソリューションです。たとえば、入力方式で単語を入力する場合、ユーザーはメモリバイアスを持っている可能性があり、最適な解決策は必ずしもユーザーが入力したい単語であるとは限りません。問題のあるスコアリングスキームでは、最良のものを見つけることは意味がありません。確率に基づいて複数の決定をクラスター化し、クラスターの中心が最適なアライメントスキームです。

下の円に示すように、斜め上向きに歩くことができます。ここに画像の説明を挿入

総括する

  • 動的計画法における配列アラインメント問題の場合、最初のポイントは、それを多段階の意思決定問題に変換する方法を考えることです。この記事では、SとTをSに整列させる方法の元の問題がTから導出され、3つの可能なケースがそれぞれリストされています。これらの3つのケースの分割は、SとTの再帰的な添え字の変更に基づいています。 、同時に-1(一致)、S-1(挿入)、T-1(削除)。
  • 基礎を分割した後、3つの異なる意思決定の方向があります。意思決定の方向を選択する方法は、動的計画法と最適解を見つけることの特徴です。
  • 初期化する方法、および状態境界を書き込む方法。

おすすめ

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