鋼條切割-遞歸

題的描述就不寫(xiě)了。

本篇是《算法導(dǎo)論》中鋼條切割的遞歸實(shí)現(xiàn)(實(shí)際生產(chǎn)中效率很低,復(fù)雜度是指數(shù)增長(zhǎng)的,使用線性規(guī)劃可以將復(fù)雜度由指數(shù)增長(zhǎng)優(yōu)化為線性增長(zhǎng)),以后會(huì)補(bǔ)上線性規(guī)劃實(shí)現(xiàn)茴厉。

分治法適用情景:一個(gè)大問(wèn)題可分割成2份相互獨(dú)立的子問(wèn)題
線性規(guī)劃適用場(chǎng)景:一個(gè)大問(wèn)題分割成的子問(wèn)題需要子子問(wèn)題的結(jié)果

代碼中p數(shù)組是長(zhǎng)度 1-9 對(duì)應(yīng)的價(jià)值,p[0]=0什荣。

遞歸一般都是根據(jù)數(shù)學(xué)歸納法實(shí)現(xiàn)的矾缓。
假設(shè)第i次最優(yōu)解為r(i-1),則第i次的最優(yōu)解可能為r(i-1)+p[1],也可能是r(i-2)+p[2]稻爬,一般解可以用r(n-i)+p[i]表示嗜闻,需要比較所有解中最大的值。
程序之前先考慮幾個(gè)問(wèn)題:
1桅锄、 怎么覆蓋所有可能的解
2琉雳、 遞歸調(diào)用重復(fù)計(jì)算的位置在哪
3、 怎么知道取到最優(yōu)解時(shí)候的切割方式

public void test(){
    int [] p = {0, 1, 5, 8, 9, 10, 17, 17, 20, 24};
    cut(p, 4);
}

    public int cut(int[] p, int n){
        if (n == 0){
            return 0;
        }
        int q = -1;
        for (int i = 1;i <= n;i++){
//max 方法是返回2個(gè)值的最大值
            q=max(q, p[i] + cut(p, n - i));
            if (i==n){
//當(dāng) i==n 的時(shí)候就會(huì)進(jìn)入上面的if(n == 0)返回 然后通過(guò)max方法獲取最大值
                System.out.println("最優(yōu)解: " + q);
            }

        }
        return q;
    }
public int max(int a, int b){
        return a > b ? a : b;
}

接下來(lái)分析一下程序思路和執(zhí)行順序友瘤。
程序需要如下:(括號(hào)內(nèi)有的是對(duì)前一句話的解釋)
1翠肘、遞歸都要有的出口
2、分析q=max(q, p[i] + cut(p, n - i));
這句是取q和第i個(gè)p對(duì)應(yīng)的價(jià)值加上第n-i的最優(yōu)解(遞歸調(diào)用的)
因?yàn)橛型鈱觙or循環(huán)辫秧,i的值會(huì)從1增加到n(這樣就可以表示所有的解)
執(zhí)行順序:
1束倍、for循環(huán)是什么時(shí)候執(zhí)行的
2、遞歸執(zhí)行的順序

cut(p, 4)
  cut(p, 3)
    cut(p, 2)
      cut(p, 1)   
        cut(p, 0)   //返回cut(p, 0) 

cut(p, 0)的順序
1  cut(p, n - i)=0  因?yàn)閚-i==0 然后會(huì)返回 0
2  然后和p[i]相加  后與q求最大值 (最大值是p[i]+0),   所以 绪妹,q = 1甥桂;
3  獲取完q(最優(yōu)解)之后 , for循環(huán)執(zhí)行(也就是1的問(wèn)題) 
for循環(huán)會(huì)把cut(p, i)的所有情況都會(huì)遞歸(覆蓋n=i時(shí)的所有解)邮旷。
不過(guò)在for循環(huán)的時(shí)候又會(huì)重新遞歸調(diào)用已經(jīng)計(jì)算過(guò)的解黄选。

上面只解釋了最外層的遞歸
cut(p, 0)的結(jié)果返回之后 婶肩,cut(p, 1)會(huì)獲取到這個(gè)返回值 (也就是最外層結(jié)果返回办陷,然后返回到遞歸的上一層, 并給上一層提供結(jié)果狡孔,這樣一直到cut(p, 4))

n=4時(shí)cut(p, n)調(diào)用過(guò)程

怎么理解這個(gè)圖
圖中圓圈中的標(biāo)號(hào)就是對(duì)應(yīng)的cut(p, i)
n=4 i=1 調(diào)用了cut(p, 3) cut(p, 2) cut(p, 1) cut(p, 0) (對(duì)應(yīng)的是4-3-2-1-0 縱向)
n=4 for循環(huán)對(duì)應(yīng)的是 i=3 i=2 i=1 i=0(橫向)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末懂诗,一起剝皮案震驚了整個(gè)濱河市蜂嗽,隨后出現(xiàn)的幾起案子苗膝,更是在濱河造成了極大的恐慌,老刑警劉巖植旧,帶你破解...
    沈念sama閱讀 212,686評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辱揭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡病附,警方通過(guò)查閱死者的電腦和手機(jī)问窃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)完沪,“玉大人域庇,你說(shuō)我怎么就攤上這事「不” “怎么了听皿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,160評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)宽档。 經(jīng)常有香客問(wèn)我尉姨,道長(zhǎng),這世上最難降的妖魔是什么吗冤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,736評(píng)論 1 284
  • 正文 為了忘掉前任又厉,我火速辦了婚禮,結(jié)果婚禮上椎瘟,老公的妹妹穿的比我還像新娘覆致。我一直安慰自己,他們只是感情好肺蔚,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布煌妈。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪声旺。 梳的紋絲不亂的頭發(fā)上笔链,一...
    開(kāi)封第一講書(shū)人閱讀 50,043評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音腮猖,去河邊找鬼鉴扫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛澈缺,可吹牛的內(nèi)容都是我干的坪创。 我是一名探鬼主播,決...
    沈念sama閱讀 39,129評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼姐赡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼莱预!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起项滑,我...
    開(kāi)封第一講書(shū)人閱讀 37,872評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤依沮,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后枪狂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體危喉,經(jīng)...
    沈念sama閱讀 44,318評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評(píng)論 2 327
  • 正文 我和宋清朗相戀三年州疾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辜限。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,777評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡严蓖,死狀恐怖薄嫡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颗胡,我是刑警寧澤毫深,帶...
    沈念sama閱讀 34,470評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站杭措,受9級(jí)特大地震影響费什,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜手素,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評(píng)論 3 317
  • 文/蒙蒙 一鸳址、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧泉懦,春花似錦稿黍、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,861評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)言沐。三九已至,卻和暖如春酣栈,著一層夾襖步出監(jiān)牢的瞬間险胰,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,095評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工矿筝, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留起便,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,589評(píng)論 2 362
  • 正文 我出身青樓窖维,卻偏偏與公主長(zhǎng)得像榆综,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子铸史,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)鼻疮。 張土汪:刷leetcod...
    土汪閱讀 12,740評(píng)論 0 33
  • 貪心算法 貪心算法總是作出在當(dāng)前看來(lái)最好的選擇。也就是說(shuō)貪心算法并不從整體最優(yōu)考慮琳轿,它所作出的選擇只是在某種意義上...
    fredal閱讀 9,223評(píng)論 3 52
  • AuthMiddleware啟用后判沟,尼可以使用ProtectMiddleware來(lái)防止某些路由未經(jīng)授權(quán)而被訪問(wèn)。 ...
    Supremodeamor閱讀 230評(píng)論 0 0
  • 天涯明月刀利赋, 咫尺望穿秋水评。 相對(duì)言歡許, 別離花濺雨媚送。 山水有相逢, 千山無(wú)暮雪寇甸。 悠悠琴聲?shū)Q塘偎, 戚戚百草枯。 孑...
    琴聲悠悠閱讀 255評(píng)論 4 2
  • 這節(jié)課上完我的心情是沉重的拿霉,我陷入了沉思吟秩。我想起了曾經(jīng)三原色老師給我們上的《解開(kāi)命運(yùn)的封印》那節(jié)課。上完那...
    細(xì)思閱讀 1,059評(píng)論 0 1