先來看乙個例子:
如圖,各結 點代表城市, 兩結點間連 線上數字表 示城市間的 距離。試找出從結點a到 結點e的最短距離
貪心:首先,這題如果用貪心來看的話,則為a->b2,b2->c4, c4->d2, d2->e, 這應該沒有爭議吧(如果硬要挑毛病的話那麼就假設是有向圖,只能往右走),這樣得出來的結果是31,這是貪心的結果,即每次考慮眼前的最優解。
動態規劃:
如果從動歸的角度來看的話,那麼它的選擇就不是線性的了,而是在到達b、c、d、e這四個階段時從前面記錄的所有相鄰節點所記錄的最短路徑中選擇下一條最短路徑(總結得過於繁瑣),怎麼理解呢?我們一步步來看。
我們從a開始,在貪心和動歸眼裡都是兩條路,但不同的是貪心選擇了a->b2這條最短路徑,就遺忘了還有a->b1這個選擇,那麼它的下一步就只能從b2這個節點開始選擇下一步的最短路徑;而對於動態規劃來說,它需要記錄的不是從a開始的下一條最短路徑,它要記錄的是到從a開始的到b1所走過的最短距離和到b2所走過的最短距離,即b1=6,b2=2;然後下一步,進入到第二階段,即從b開始
,它首先從b1開始,走向c1,然後記錄到c1的最短距離,即c1=8,然後是c3=17,c4=13;然後從b2開始走,c2=10,然後到c3的時候發現以前的值(即從b1到c3)比現在的大,進行更新(如果比現在的路徑距離小則跳過,也就是說對於每個格仔要有一句判斷語句,判斷當前值與過去的值)即c3=9,同理c4=8;然後進入c階段,對d系列進行寫入,這裡便不再贅述。
86 10 14
最後形成這樣一記錄**:0 17 18 由此我們可知,最短距離就是e處記錄的值18;
2 9 19
因此,我們可以看出貪心與動歸的本質區別,貪心記錄眼前最優值,而動歸記錄到達每個位置時的值,而且是到達每個位置時的最優值,為什麼不漏掉某個位置呢,因為沒人會直到全域性最優路徑會不會是從這條路走出來的
。請注意我上面說的這句話,它暗含的意思是從區域性最優不一定能推出全域性最優,同時也表明了貪心不一定能算出全域性最優。而動歸是全域性的最優解。
(下面的內容經我檢查,發現有誤,請勿輕易閱讀!!!!!!,但未查明原因,故尚未刪除)
下面就動歸的問題,我有些其他的思考:
計算矩陣連乘積:
在科學計算中經常要計算矩陣的乘積。若a是乙個p×q 的矩陣,b是乙個q×r的矩陣,則其乘積c=ab是乙個 p×r的矩陣。計算c=ab總共需要pqr次的乘法。現在 的問題是,給定n個矩陣。其中ai與ai+1是 可乘的,i=1,2,…,n-1。要求計算出這n個矩陣的連乘積 a1a2…an
看乙個計算3個矩陣的連乘積的例子。設3個 矩陣的維數:10×100,100×5和5×50。按 ((a1a2)a3) 算,需10×100×5+10×5×50=7500次乘法。若按 (a1(a2a3))算,則需要的乘法次數為 100×5×50+10×100×50=75000
下面是上課時老師給出的關於動態規劃解矩陣連乘積問題的思路
記矩陣連乘積aiai+1…aj為ai…j,設計算次序在矩陣ak和ak+1之間將矩陣鏈斷開, 1<=k這裡說到a1...aj可以分解為a1...ak和ak+1...aj,這似乎與我前面說的有些出入,因為這裡暗含的意思是區域性最優可以推出全域性最優,那麼怎麼回事呢?請注意思路中所說, 對於矩陣來說,它的總計算量是等於分段的計算量相乘的, 也就是說在這裡相當於單一的路徑,請看下面的圖:
(沒找到合適的圖,暫且用這張,假設為有權圖,即每條邊都有權值,設為長度),如果要求求出從0到9的最短距離,那麼很明顯,點0,3,6,9是必經點,在這幾個點上,貪心的結論是成立的,即0->9的最短路徑可以分為幾段路徑之和,但對於其他點來說,這一結論是不成立的,因為最短路徑不一定會經過那個點。同樣,對於本文一開始給出的那張圖來說,結論可謂是處處不成立,因為除了兩端點每個點都是**點。(這僅是我在老師講解動態規劃舉矩陣連乘時產生的思考,本人水平不高,如若有錯,敬請指正,謝謝)
貪心與動態規劃的區別
貪心與動規的區別 關鍵 看是否用到之前的最優解,如果用到就是動態規劃,否則就是貪心,貪心無法解決動態規劃的問題,但是動態規劃能解決貪心的問題 很多同學在做動規題的時候,很容易做成貪心,的確,動規和貪心是很相近的,在很多時候,動規和貪心沒有明顯的界限,反而在很多時候,我們需要使用貪心的思想,對動規進行...
遞迴 迭代 動態規劃的區別與聯絡
遞迴 程式呼叫自身,從頂部將問題分解,通過解決掉所有分解出來的小問題,來解決整個問題。迭代 利用變數的原值推算出變數的乙個新值。遞迴中一定有迭代,但是迭代中不一定有遞迴。動態規劃 通常與遞迴相反,其從底部開始解決問題。將所有小問題解決掉,進而解決的整個問題。自上而下呼叫函式本身,速度較慢,不推薦。要...
動態規劃與貪心演算法的區別
本來這次是該總結動態規劃的,但在學習過程中發現動態規劃和上一節的貪心演算法有很大聯絡,而在演算法設計過程中主要是對兩種演算法的選擇,所以決定這次以對比的方式做總結,既可以更深入地了解動態規劃,又可以對貪心演算法有個新的認識。背景介紹 這兩種演算法都是選擇性演算法,就是從乙個候選集合中選擇適當的元素加...