演算法第三章作業

2022-07-09 22:39:11 字數 704 閱讀 9916

1、單調遞增最長子序列

1.1 根據最優子結構性質,列出遞迴方程式,

最優子結構性質:a陣列存放輸入的序列,m陣列會更新 (設下標為i)最後存放的是下標為i的 將a[i]作為單調遞增最長子序列最後的數,也就是作為a[i]作為最大數的最長子序列長度。

遞迴方程式:

m[i] = max(m[j])+1     a[i]>a[j]&&m[j]m[i]=1 i=1

1.2 給出填表法中表的維度、填表範圍和填表順序。

表的維度:一維

填表範圍:[1,n]

填表順序:設定i和j 以j為標準 去用i遍歷j前的所有數來更新m陣列來找到m[j]作為最大時的最長單調遞增子串行的長度,從m[1]到m[n],從左到右。

1.3 分析該演算法的時間和空間複雜度

時間複雜度:填表需要遍歷j前所有元素 所以時間複雜度是o(n^2)

空間複雜度:一維陣列 空間複雜度為o(n)

動態規劃演算法的演算法關鍵是找到最優子結構,通過列出遞迴方程式來根據列出的遞迴方程式編寫**,但是找到最優子結構和列方程的過程很難想到,需要對題目有深刻的理解,找到適合該題目的最優子結構和遞迴方程式,找到題目的根本,根據構造陣列 來儲存解一步一步靠近最優解。

我負責打**部分,我覺得結對程式設計情況良好,可以將自己的**解釋一遍給要講解給老師的同學,讓自己對**更加印象深刻,對**的一些關鍵部分的理解會更加到位,更加能知道為什麼我打這段**可以達成我要的效果。

演算法第三章作業

1.動態規劃是一種能夠減少重複運算的一種演算法,比較適合原問題能依賴於子問題解得,而子問題也能夠依賴於子子問題解得而出的問題。其次,動態規劃更適合於資料量較多的時候的一種演算法,當資料量沒有到達一定規模的時候,動態規劃演算法不能夠體現出足夠的優勢。如對於揹包問題的貪心演算法和動態規劃法 2.1 單調...

演算法第三章作業

我覺得動態規劃是一種分治法的偽高階型,它將乙個大問題可以分成若干個小問題後,解決子問題,然後將子問題的解插入到乙個表中,用乙個表來記錄所有的已經得到答案的子問題的解,後面就可以發現,無論子問題的解是否被用到,其都在表中,接著求問題便可以節省大量的時間。3 1m i 1 n 1 m i max 1 1...

演算法第三章作業

組員 高珞洋,何汶珊 之前在學習分治法的時候也有將其和動態規劃進行比較,動態規劃能夠解題的根本要求是原問題可以細分成子問題,且原問題的最優解必包含子問題的最優解。為了更明確上述條件,從而保證題目能夠運用動態規劃求解,通常需要兩步操作 明確問題具有最優子結構,並分解問題 找出遞推關係式 狀態轉移方程 ...