動態規劃演算法的理解

2022-08-12 14:45:14 字數 826 閱讀 6637

---恢復內容開始---

1.對動態規劃演算法的理解

官方解釋:

自己的理解:在解決乙個問題時,需要找出最優解。在最優解會有很多個小的子解組成,那麼在選擇子解的過程中需要篩選掉明顯不合適的解(因為所有的解都遍歷會耗費大量的時間),保留可能的最優解,就能節約求解的時間。

2.程式設計第一題的核心**

def

length_of_lis(nums):

len_nums =len(nums)

# 列表為空時退出

if len_nums ==0:

return0

dp = [1] *len_nums

for i in range(len_nums - 1):

for j in range(i + 1):

#如果nums[i+1]能綴在nums[j]後面的話,就dp[j]+1

if nums[i + 1] >nums[j]:

# 取最大值

dp[i + 1] = max(dp[i + 1], dp[j] + 1)

return

max(dp)

2.程式設計第二題的核心**

int dp(int

n)

}return c[1

][n];

}

3.結對程式設計的進度

學到動態規劃演算法時,我們都感覺有一定的難度,在討論並蒐集相關資料後,基本弄懂了兩個程式設計題的核心演算法,感覺有一定的提公升

理解動態規劃演算法

動態規劃的思想是將乙個問題分解為若干子問題,並且子問題之間還有重疊,通過先求解這些子問題的最優解,將原問題的最優解通過這些子問題的最優解構造出來,從而得到原問題的最優解。由此可以得到動態規劃演算法的應用場景 若求乙個問題的最優解 通常是求最大值或者最小值 而且該問題能夠分解成若干個子問題,並且子問題...

動態規劃演算法的理解

動態規劃演算法主要的核心思想是 狀態和狀態轉移方程。怎麼理解這個問題呢?先拿到了乙個數字三角形的程式,閱讀了它的動態規劃的 但是看不明白!不明白在什麼地方呢?在具體的執行過程各個變數的變化方向。比如兩層for迴圈,i為逆序,j為次序。那麼這種執行次序就沒有辦法想象了。那就先不管上面的了,先看dag上...

動態規劃演算法理解

幾個月前已經弄懂了的演算法,現在回憶起來這麼費勁。又得重頭開始,真是浪費生命啊。再好的腦袋也不如爛筆頭!這裡用最長公共子串行問題 lcs 來說明演算法 給定兩個序列 x y 求x y長度最長的公共子串行。前期儲備知識 公共子串行不等於公共字串 注意區分 例如,如果x y 那麼就是x和y的公共子串行,...