---恢復內容開始---
1.對動態規劃演算法的理解
官方解釋:
自己的理解:在解決乙個問題時,需要找出最優解。在最優解會有很多個小的子解組成,那麼在選擇子解的過程中需要篩選掉明顯不合適的解(因為所有的解都遍歷會耗費大量的時間),保留可能的最優解,就能節約求解的時間。
2.程式設計第一題的核心**
def2.程式設計第二題的核心**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)
int dp(int3.結對程式設計的進度n)
}return c[1
][n];
}
學到動態規劃演算法時,我們都感覺有一定的難度,在討論並蒐集相關資料後,基本弄懂了兩個程式設計題的核心演算法,感覺有一定的提公升
理解動態規劃演算法
動態規劃的思想是將乙個問題分解為若干子問題,並且子問題之間還有重疊,通過先求解這些子問題的最優解,將原問題的最優解通過這些子問題的最優解構造出來,從而得到原問題的最優解。由此可以得到動態規劃演算法的應用場景 若求乙個問題的最優解 通常是求最大值或者最小值 而且該問題能夠分解成若干個子問題,並且子問題...
動態規劃演算法的理解
動態規劃演算法主要的核心思想是 狀態和狀態轉移方程。怎麼理解這個問題呢?先拿到了乙個數字三角形的程式,閱讀了它的動態規劃的 但是看不明白!不明白在什麼地方呢?在具體的執行過程各個變數的變化方向。比如兩層for迴圈,i為逆序,j為次序。那麼這種執行次序就沒有辦法想象了。那就先不管上面的了,先看dag上...
動態規劃演算法理解
幾個月前已經弄懂了的演算法,現在回憶起來這麼費勁。又得重頭開始,真是浪費生命啊。再好的腦袋也不如爛筆頭!這裡用最長公共子串行問題 lcs 來說明演算法 給定兩個序列 x y 求x y長度最長的公共子串行。前期儲備知識 公共子串行不等於公共字串 注意區分 例如,如果x y 那麼就是x和y的公共子串行,...