《動態規劃 鋼條切割》系列 第一講 什麼是鋼條切割

2021-09-25 20:54:11 字數 1857 閱讀 9830

最近在看演算法導論,打算把一些心得記錄下來,一是為了當作筆記自己看,二是希望能給其他人帶來些幫助。 (如果你是屬於學習的階段,建議你拿個本子和筆邊看邊記錄一些疑問和靈感,這樣有助於提高學習效率)

動態規劃_鋼條切割,這個系列預計分成三課來說,分別是:

什麼是鋼條切割

樸素遞迴演算法求最優方案

動態規劃演算法求最優方案

某公司購買長鋼條,將其切割為短鋼條**,切割工序本身沒有成本支出,在確定每種長度的售出**時,公司管理層希望知道最佳切割方案。

其中公司**一段長度為i寸的鋼條的**為pi(i=1,2,…,單位為元),鋼條的長度均為整數。**表如下:

長度i123

4567

8910**pi15

891017

1720

2430

我們現在要做的是 給定一段長度為n寸的鋼條和乙個**表pi(i,2,…,n),求切割方案,使得銷售收益rn最大。如果長度為n寸的鋼條**pn夠大的話,最優解可能就是完全不需要切割。

ok,對於上面需求,我們提取一下重要的資訊。(括號裡面的內容可以不看,那些是我看書的時候的一些想法,因為我感覺我的腦洞比較大,如果你也是的話,可以跟隨我的腦洞一起放飛,哈哈)

切割工序本身沒有支出(好學的你已經在想如果切割工序有支出的時候怎麼求最佳切割方案了,不急,後面我們在來**)

公司買回來的原始鋼條n寸,**表裡面有長度從1到n的每個長度的**,這個很重要,因為這個系列的演算法都依賴這個前提。(腦洞大的你,估計在想如果有些長度沒有的時候怎麼求最佳切割方案。哈哈,我們分析一下,怎麼會不賣指定長度的鋼條呢,除非老闆比較迷信,不想賣4(諧音」死「)這種的長度,或者客戶就是不想買指定長度的。嗯,老闆和客戶最大,容我後面看有沒時間分析一下怎麼求解)

** price簡寫p,銷售收入 revenue簡寫r(這個是我自己想象的,不知道書裡面的本意也是這樣想的,哈哈)

好了,想一下,我們該如果求解最優方案呢?那正常的思路,就是把所有可能分割的情況列出來,並分別算出每個方案的收入,然後取其中最高的收入。那麼問題來了,長度為n寸的鋼條一共有幾種切割方式呢?

當 n = 1時,有1種切割方案:1

當 n = 2時,有2種切割方案: 2、1+1

當 n = 3時,有4種切割方案: 3、1+2、2+1、1+1+1

通過上面的列舉,聰明的你應該有了列舉所有切割方案的方式了,沒錯,就是 長度為n寸,中間一共有n-1處可以分割的地方,而每個可分割的地方,我們有分割和不分割兩種選擇,那這樣一共就有 2n−

12^

2n−1

種分割方案。

如果乙個最優解將鋼條切割為k段(1<=k<=n), 那麼最優切割方案

n = i1 + i2 + … + ik

注意:這裡的i1 、 i2 、 ik 表示每小段的長度

把切割為k段的每個小段的**加起來就是最大收益

rn = pi1

+ pi2

+ … + pik

注意:p表示**,ik表示長度,所以pik

表示第k小段,長度為ik的**。

所以我們要做的就是求出最優切割方案最大收益。但是對於長度為n寸的,一共有2n-1種切割方案,顯然不能人工列舉來處理這個問題,那如何用**實現呢,請移步下一講 《動態規劃_鋼條切割》系列 第二講:樸素遞迴演算法

最後對一些符號表達的意思再做一次複習:

rn :長度為n寸的銷售收益 (r表示銷售收益,n表示總長度)

pi :長度為i寸的銷售的** (p表示**,i表示長度)

動態規劃詳解(第一講)

第一講內容來自 演算法問題實戰策略 韓 具宗萬著 典型示例 應用動態規劃最有名的示例是二項式係數 binomial coefficient 的計算,二項式係數 nr dbinom rn 表示在n個互不相等的元素中無順序的挑選出r個元素的方法的總數。二項式係數具有如下遞迴式 nr n 1r 1 n 1...

動態規劃(一)鋼條切割

什麼是動態規劃 答 動態規劃與分治法相似,都是通過組合子問題的解來求解原問題。他們之間的不同是,分治法將問題劃分為互不相交的子問題,而動態規劃應用於子問題重合的情況。使用分治法求解子問題重合的問題,會做許多不必要的工作,動態規劃將已經求解的子問題儲存到一張 中,從而避免了反覆求解重合子問題的情況。動...

動態規劃入門一 鋼條切割問題

問題 求解乙個鋼條如何切割鋼條的簡單問題。給定一段長度為n英吋的鋼條和乙個 表pi i 1,2,n 求切割鋼條方案,使得銷售收益rn最大。注意,如果長度為n英吋的鋼條的 pn足夠大,最優解可能就是完全不需要切割。輸入 長度i 1 2 3 4 5 6 7 8 9 10 pi 1 5 8 9 10 17...