ダイナミックプログラミング(最長増加部分列)

最長増加部分列

  {S1、S2、...、Snを所定のシーケンス }、 新しいシーケンス番号{たSi1、Si2を、...、シムを形成するのに要する数 }、 I1、I2 ... Imは新たなシーケンスで、すなわち増加し続けます各番号は、順番に、列の元の数のまま、新たな配列は、元の配列であることを特徴とする配列

  サブシーケンスの場合、とき下IX>ときの元のシーケンスのサブシーケンスとして知られているIY、六> SIY、サブシーケンスを増やします

  最長のサブシーケンスの長さを増加させるメモリアレイDPを定義し、DPは、[N]のSnの最長増加系列長配列の終わりを意味します。増加サブ{たSi1、Si2を、...、シム}ため、Imは<NとSIM <Snは、この場合には{たSi1、Si2を、...、SIM、Snは}増加するシーケンスでは、シーケンスを増加させる場合長さの増加。上記の条件を満足するシーケンスをインクリメント、見つけることである最長増加サブシーケンスの長さは、互いに配列で最も長い配列の長さを増加させる最長の終わりとしてSnを含むSNはインクリメントされて構成されています。したがって、{|のSi <Snの&& iがn <I] +1 DP} [N] = maxにDP。

  シーク[n]はDPがシーケンスは、条件を満たしているこの時点で、{Snのを}構成インクリメントされたときに見出されないかもしれないがインクリメントされているので配列、上記式の解決に変更を加える必要があるので、DP [n]は、すなわち、最小であります:

  DP [N] =最大{1、DP [i]は+1 |のSi <Snの&& iが<N}

  長さNのシーケンスのために、必ずしも錫、従ってDP [N]の最長増加サブシーケンスの終了でない配列の最長増加系列長ではなく、アレイは、所望の結果が最大であるDP見つけるために横断する必要があります。

おすすめ

転載: www.cnblogs.com/yjxyy/p/11118981.html