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

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

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

  1. 什麼是鋼條切割
  2. 樸素遞歸算法求最優方案
  3. 動態規劃算法求最優方案

什麼是鋼條切割?

某公司購買長鋼條,將其切割爲短鋼條出售,切割工序本身沒有成本支出,在確定每種長度的售出價格時,公司管理層希望知道最佳切割方案。
其中公司出售一段長度爲i寸的鋼條的價格爲pi(i=1,2,…,單位爲元),鋼條的長度均爲整數。價格表如下:

長度i 1 2 3 4 5 6 7 8 9 10
價格Pi 1 5 8 9 10 17 17 20 24 30

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

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

  1. 切割工序本身沒有支出好學的你已經在想如果切割工序有支出的時候怎麼求最佳切割方案了,不急,後面我們在來探討
  2. 公司買回來的原始鋼條n寸,價格表裏面有長度從1到n的每個長度的價格,這個很重要,因爲這個系列的算法都依賴這個前提。腦洞大的你,估計在想如果有些長度沒有的時候怎麼求最佳切割方案。哈哈,我們分析一下,怎麼會不賣指定長度的鋼條呢,除非老闆比較迷信,不想賣4(諧音”死“)這種的長度,或者客戶就是不想買指定長度的。嗯,老闆和客戶最大,容我後面看有沒時間分析一下怎麼求解
  3. 價格 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處可以分割的地方,而每個可分割的地方,我們有分割和不分割兩種選擇,那這樣一共就有 2n12^{n-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表示長度)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章