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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【动态规划】关于转移方程的简单理解

發(fā)布時(shí)間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【动态规划】关于转移方程的简单理解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是動(dòng)態(tài)規(guī)劃,我們要如何描述它?

動(dòng)態(tài)規(guī)劃算法通常基于一個(gè)遞推公式及一個(gè)或多個(gè)初始狀態(tài)。當(dāng)前子問題的解將由上一次子問題的解推出。使用動(dòng)態(tài)規(guī)劃來解題只需要多項(xiàng)式時(shí)間復(fù)雜度,因此它比回溯法、暴力法等要快許多。

這里所說的子問題并不一定指前一個(gè)問題的解

比如說1+2+3+。。。+100,我們這里可以sum[i]+100來求出總和,而sum[i]是1加到i的總和,這個(gè)問題就是1加到99的子問題再加上100就得到。

動(dòng)態(tài)規(guī)劃則并非是如此,它可能跟前面所有的子問題的某個(gè)解有聯(lián)系,舉個(gè)例子:

如果我們有面值為1元、3元和5元的硬幣若干枚,如何用最少的硬幣湊夠11元?

(表面上這道題可以用貪心算法,但貪心算法無法保證可以求出解,比如1元換成2元的時(shí)候)

首先我們思考一個(gè)問題,如何用最少的硬幣湊夠i元(i<11)?為什么要這么問呢?兩個(gè)原因:1.當(dāng)我們遇到一個(gè)大問題時(shí),總是習(xí)慣把問題的 規(guī)模變小,這樣便于分析討論。 2.這個(gè)規(guī)模變小后的問題和原來的問題是同質(zhì)的,除了規(guī)模變小,其它的都是一樣的,本質(zhì)上它還是同一個(gè)問題(規(guī)模變小后的問題其實(shí)是原問題的子問題)。

好了,讓我們從最小的i開始吧。當(dāng)i=0,即我們需要多少個(gè)硬幣來湊夠0元。由于1,3,5都大于0,即沒有比0小的幣值,因此湊夠0元我們最少需 要0個(gè)硬幣。 (這個(gè)分析很傻是不是?別著急,這個(gè)思路有利于我們理清動(dòng)態(tài)規(guī)劃究竟在做些什么。) 這時(shí)候我們發(fā)現(xiàn)用一個(gè)標(biāo)記來表示這句“湊夠0元我們最少需要0個(gè)硬幣。”會(huì)比較方便,如果一直用純文字來表述,不出一會(huì)兒你就會(huì)覺得很繞了。那么,我們用 d(i)=j來表示湊夠i元最少需要j個(gè)硬幣。于是我們已經(jīng)得到了d(0)=0,表示湊夠0元最小需要0個(gè)硬幣。當(dāng)i=1時(shí),只有面值為1元的硬幣可用, 因此我們拿起一個(gè)面值為1的硬幣,接下來只需要湊夠0元即可,而這個(gè)是已經(jīng)知道答案的,即d(0)=0。所 以,d(1)=d(1-1)+1=d(0)+1=0+1=1。當(dāng)i=2時(shí),仍然只有面值為1的硬幣可用,于是我拿起一個(gè)面值為1的硬幣,接下來我只需要再 湊夠2-1=1元即可(記得要用最小的硬幣數(shù)量),而這個(gè)答案也已經(jīng)知道了。所以d(2)=d(2-1)+1=d(1)+1=1+1=2。一直到這里,你 都可能會(huì)覺得,好無聊,感覺像做小學(xué)生的題目似的。因?yàn)槲覀円恢倍贾荒懿僮髅嬷禐?的硬幣!耐心點(diǎn),讓我們看看i=3時(shí)的情況。當(dāng)i=3時(shí),我們能用的硬 幣就有兩種了:1元的和3元的( 5元的仍然沒用,因?yàn)槟阈枰獪惖臄?shù)目是3元!5元太多了親)。既然能用的硬幣有兩種,我就有兩種方案。如果我拿了一個(gè)1元的硬幣,我的目標(biāo)就變?yōu)榱?#xff1a;湊夠 3-1=2元需要的最少硬幣數(shù)量。即d(3)=d(3-1)+1=d(2)+1=2+1=3。這個(gè)方案說的是,我拿3個(gè)1元的硬幣;第二種方案是我拿起一 個(gè)3元的硬幣,我的目標(biāo)就變成:湊夠3-3=0元需要的最少硬幣數(shù)量。即d(3)=d(3-3)+1=d(0)+1=0+1=1. 這個(gè)方案說的是,我拿1個(gè)3元的硬幣,這里d(3)值跟d(2)是沒有關(guān)系的,如果你還不理解,下面我們結(jié)合01背包來說明。好了,這兩種方案哪種更優(yōu)呢?記得我們可是要用最少的硬幣數(shù)量來湊夠3元的。所以,選擇d(3)=1,怎么來的呢? 具體是這樣得到的:d(3)=min{d(3-1)+1, d(3-3)+1}。

狀態(tài)和狀態(tài)轉(zhuǎn)移方程

從以上的文字中,我們要抽出動(dòng)態(tài)規(guī)劃里非常重要的兩個(gè)概念:狀態(tài)和狀態(tài)轉(zhuǎn)移方程。

狀態(tài):就是上面d(3)d(2)等,抽象d(i);

狀態(tài)轉(zhuǎn)移方程:d(3)=min{d(3-1)+1, d(3-3)+1},抽象d(i)=min{ d(i-vj)+1 },其中i-vj?>=0,vj表示第j個(gè)硬幣的面值;

總結(jié)

以上是生活随笔為你收集整理的【动态规划】关于转移方程的简单理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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