日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

漫画:什么是动态规划?(整合版)

發(fā)布時(shí)間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 漫画:什么是动态规划?(整合版) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載自?玻璃貓 程序員小灰

————————————

題目:

有一座高度是10級(jí)臺(tái)階的樓梯,從下往上走,每跨一步只能向上1級(jí)或者2級(jí)臺(tái)階。要求用程序來(lái)求出一共有多少種走法。

比如,每次走1級(jí)臺(tái)階,一共走10步,這是其中一種走法。我們可以簡(jiǎn)寫成 1,1,1,1,1,1,1,1,1,1。

再比如,每次走2級(jí)臺(tái)階,一共走5步,這是另一種走法。我們可以簡(jiǎn)寫成 2,2,2,2,2。

當(dāng)然,除此之外,還有很多很多種走法。

————————————

第一種情況:

第二種情況:

把思路畫出來(lái),就是這樣子:

F(1) = 1;

F(2) = 2;

F(n) = F(n-1)+F(n-2)(n>=3)

方法一:遞歸求解

由于代碼比較簡(jiǎn)單,這里就不做過(guò)多解釋了。

如圖所示,相同的顏色代表了方法被傳入相同的參數(shù)。

方法二:備忘錄算法

在以上代碼中,集合map是一個(gè)備忘錄。當(dāng)每次需要計(jì)算F(N)的時(shí)候,會(huì)首先從map中尋找匹配元素。如果map中存在,就直接返回結(jié)果,如果map中不存在,就計(jì)算出結(jié)果,存入備忘錄中。

方法三:動(dòng)態(tài)規(guī)劃求解

程序從 i=3 開(kāi)始迭代,一直到 i=n 結(jié)束。每一次迭代,都會(huì)計(jì)算出多一級(jí)臺(tái)階的走法數(shù)量。迭代過(guò)程中只需保留兩個(gè)臨時(shí)變量a和b,分別代表了上一次和上上次迭代的結(jié)果。 為了便于理解,我引入了temp變量。temp代表了當(dāng)前迭代的結(jié)果值。

題目二: 國(guó)王和金礦

有一個(gè)國(guó)家發(fā)現(xiàn)了5座金礦,每座金礦的黃金儲(chǔ)量不同,需要參與挖掘的工人數(shù)也不同。參與挖礦工人的總數(shù)是10人。每座金礦要么全挖,要么不挖,不能派出一半人挖取一半金礦。要求用程序求解出,要想得到盡可能多的黃金,應(yīng)該選擇挖取哪幾座金礦?

方法一:排列組合

每一座金礦都有挖與不挖兩種選擇,如果有N座金礦,排列組合起來(lái)就有2^N種選擇。對(duì)所有可能性做遍歷,排除那些使用工人數(shù)超過(guò)10的選擇,在剩下的選擇里找出獲得金幣數(shù)最多的選擇。

代碼比較簡(jiǎn)單就不展示了,時(shí)間復(fù)雜度也很明顯,就是O(2^N)。

F(n,w) = 0 (n<=1, w<p[0]);

F(n,w) = g[0] (n==1, w>=p[0]);

F(n,w) =?F(n-1,w) (n>1, w<p[n-1])

F(n,w) = max(F(n-1,w), F(n-1,w-p[n-1])+g[n-1]) (n>1, w>=p[n-1])

其中第三條是補(bǔ)充上去的,原因不難理解。

方法二:簡(jiǎn)單遞歸

把狀態(tài)轉(zhuǎn)移方程式翻譯成遞歸程序,遞歸的結(jié)束的條件就是方程式當(dāng)中的邊界。因?yàn)槊總€(gè)狀態(tài)有兩個(gè)最優(yōu)子結(jié)構(gòu),所以遞歸的執(zhí)行流程類似于一顆高度為N的二叉樹(shù)。

方法的時(shí)間復(fù)雜度是O(2^N)。

方法三:備忘錄算法

在簡(jiǎn)單遞歸的基礎(chǔ)上增加一個(gè)HashMap備忘錄,用來(lái)存儲(chǔ)中間結(jié)果。HashMap的Key是一個(gè)包含金礦數(shù)N和工人數(shù)W的對(duì)象,Value是最優(yōu)選擇獲得的黃金數(shù)。

方法的時(shí)間復(fù)雜度和空間復(fù)雜度相同,都等同于備忘錄中不同Key的數(shù)量。

方法四:動(dòng)態(tài)規(guī)劃

方法利用兩層迭代,來(lái)逐步推導(dǎo)出最終結(jié)果。在外層的每一次迭代,也就是對(duì)表格每一行的迭代過(guò)程中,都會(huì)保留上一行的結(jié)果數(shù)組 preResults,并循環(huán)計(jì)算當(dāng)前行的結(jié)果數(shù)組results。

方法的時(shí)間復(fù)雜度是 O(n * w),空間復(fù)雜度是(w)。需要注意的是,當(dāng)金礦只有5座的時(shí)候,動(dòng)態(tài)規(guī)劃的性能優(yōu)勢(shì)還沒(méi)有體現(xiàn)出來(lái)。當(dāng)金礦有10座,甚至更多的時(shí)候,動(dòng)態(tài)規(guī)劃就明顯具備了優(yōu)勢(shì)。

?

?

總結(jié)

以上是生活随笔為你收集整理的漫画:什么是动态规划?(整合版)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。