演算法 動態規劃 求最長字段

2021-08-31 01:42:27 字數 962 閱讀 2889

令n個數為x=,設m[j]是以x[j]開頭的乙個最長單調遞增序列,其長度為c[j]

設原問題的所求最優解是:max,顯然,c[j]有下面遞迴式成立:

c[j]=max+1,1}

j=k<=n&&x[j]<=x[k]

注:動態規劃就是要把大事化小,小事化了,我們j從n開始,

c[n]=1 j=n

當jx[k])

c[j]=1

重點:k也要迴圈,這是我作為初學者最為不懂得。

舉個例子:

數列為8的最長長度為:1

6的最長長度為:2

11的最長長度為:1

9的最長長度:2

3的最長長度:3

1的最長長度:4

2的最長長度:4

4 的最長長度:3

顯然時間複雜度為n^2

改進:a 長度為i的候選序列的結尾元素的位置

b 每個元素結尾的單調遞增序列的前乙個元素位置

陣列為m=

此為a陣列的變化方式

顏色表示:每當遍歷乙個數k時,在a中找到i最小且a[i]大於k.則用k在m中的編號替代a[i].q且用b記錄a[i-1]的數(也就是記錄在a陣列中前乙個數的值(值為在m中的序號))

此為b陣列的變化方式

找最長遞增子段,即從a最後確定的一組最後乙個數開始找

即最長為 10-8-7-4-3

演算法學習 動態規劃 求最長子序列

對於母串x y 求lcs與最長公共子串。子串應該比較好理解,至於什麼是子串行,這裡給出乙個例子 有兩個母串 比如序列bo,bg,lg在母串cnblogs與belong中都出現過並且出現順序與母串保持一致,我們將其稱為公共子串行。最長公共子串行 longest common subsequence,l...

動態規劃 求最長遞增子串行

題目 給出一段陣列,比如 1,3,5,2,4,6,7,8 得到的最長為1,2,4,6,7,8。思路 利用dp陣列來解決這個問題,dp i 表示0 i之間最長的子串行的長度。dp的求法如果a i a j dp i math.max dp i dp j 1 首先求出dp的 如下 private stat...

動態規劃 求DAG中最長路徑

給定乙個有向無環加權圖,求圖中的最長路徑。該圖中的最長距離為14,即2 4 6 2。首先我們要對有向無環加權圖進行拓撲排序。拓撲排序的意思簡要來說就是將圖中頂點和邊排成乙個線性序列,對於,經拓撲排序後一定滿足vi在vj的前面。拓撲排序的實現方法 首先找出圖中入度為0的點加入拓撲排序後的序列,例子中為...