• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 70  文章 - 160  trackbacks - 0

            公告:
            知識(shí)共享許可協(xié)議
            本博客采用知識(shí)共享署名 2.5 中國(guó)大陸許可協(xié)議進(jìn)行許可。本博客版權(quán)歸作者所有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意不得隨機(jī)刪除文章任何內(nèi)容,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。 具體操作方式可參考此處。如您有任何疑問或者授權(quán)方面的協(xié)商,請(qǐng)給我留言。

            常用鏈接

            留言簿(8)

            隨筆檔案

            文章檔案

            搜索

            •  

            積分與排名

            • 積分 - 179013
            • 排名 - 147

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            第十四章我想放在后面再看,先擱下。希望大家總結(jié)的一些文章也能向我推薦下,大家互相學(xué)習(xí)。

            首先,還是建議看看前言:http://www.shnenglu.com/tanky-woo/archive/2011/04/09/143794.html

            其次,阿門,感謝老天送給了我們這么一本圣經(jīng),看了這一章,再次感受到了《算法導(dǎo)論》分析問題的精辟,強(qiáng)悍的魅力。Orz, Orz,各種Orz。

            這一章講的是動(dòng)態(tài)規(guī)劃,學(xué)算法的朋友,尤其是搞ACM的,對(duì)這個(gè)策略一定非常熟悉,所以這個(gè)算法網(wǎng)上的分析講解教程也是鋪天蓋地,大家可以多搜幾篇學(xué)習(xí)學(xué)習(xí)。

            動(dòng)態(tài)規(guī)劃(Dynamic Programming,簡(jiǎn)稱DP)是通過組合子問題的解來(lái)解決問題的。

            注意這里的programming不是指編程,而是指一種規(guī)劃

            因?yàn)镈P用的太廣泛了,并且書上也花了很大的篇幅來(lái)講這一章,所以我也準(zhǔn)備把這一章分幾篇來(lái)總結(jié),并且我不按照書上的順序來(lái)總結(jié),也不會(huì)全部用書上的例子。

            這一章首先給出一些基礎(chǔ)的概念,然后給出一個(gè)最基礎(chǔ)入門的DP問題,三角形求值問題。

            DP適用于子問題不是獨(dú)立的情況,這樣如果用分治法,也會(huì)作許多重復(fù)的工作,而DP只對(duì)子問題求解一次,將其結(jié)果保存在一張表中,從而避免了每次遇到各個(gè)子問題時(shí)重新計(jì)算的情況。

            比較分治法于動(dòng)態(tài)規(guī)劃的區(qū)別:

            分治法:將問題劃分為一些獨(dú)立的子問題,遞歸的求解各子問題,然后合并子問題的解而得到原問題的解。

            eg.

            MERGE-SORT(A, p, r)
            1 if p < r
            2   then q ← |(p + r)/2|
            3        MERGE-SORT(A, p, q)
            4        MERGE-SORT(A, q + 1, r)
            5        MERGE(A, p, q, r)
            動(dòng)態(tài)規(guī)劃適用于子問題不是獨(dú)立的情況,也就是各子問題包含公共的子子問題,鑒于會(huì)重復(fù)的求解各子問題,DP對(duì)每個(gè)問
            只求解一遍,將其保存在一張表中,從而避免重復(fù)計(jì)算。

            DP算法的設(shè)計(jì)可以分為四個(gè)步驟

            ①.描述最優(yōu)解的結(jié)構(gòu)。

            ②.遞歸定義最優(yōu)解的值。

            ③.按自底而上的方式計(jì)算最優(yōu)解的值。

            ④.由計(jì)算出的結(jié)果創(chuàng)造一個(gè)最優(yōu)解。

            下面來(lái)看看三角形求值這個(gè)問題:

            將一個(gè)由N行數(shù)字組成的三角形,如圖所以,設(shè)計(jì)一個(gè)算法,計(jì)算出三角形的由頂至底的一條路徑,使該路徑經(jīng)過的數(shù)字總和最大。

            sanjiaoxing

            這是在我見過的DP題目中,算是最簡(jiǎn)單的了,我相信就算沒有學(xué)過DP的也會(huì)。

            將上圖轉(zhuǎn)化一下:

            sanjiaoxing2

            假設(shè)上圖用map[][]數(shù)組保存。

            令f[i][j]表示從頂點(diǎn)(1, 1)到頂點(diǎn)(i, j)的最大值。

            則可以得到狀態(tài)轉(zhuǎn)移方程:

            f[i][j] = max(f[i+1][j], f[i+1][j+1]) + map[i][j]

            此題既適合自頂而下的方法做,也適合自底而上的方法,

            當(dāng)用自頂而下的方法做時(shí),最后要在在最后一列數(shù)中找出最大值,

            而用自底而上的方法做時(shí),f[1][1]即為最大值。

            所以我們將圖2根據(jù)狀態(tài)轉(zhuǎn)移方程可以得到圖3:

            sanjiaoxing3

            最大值是30.

            很簡(jiǎn)單的DP題,代碼如下:

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            43
            44
            45
            46
            
            /*
            Author: Tanky Woo
            Blog:   www.WuTianQi.com
            Description: 動(dòng)態(tài)規(guī)劃之三角形求值問題
            */
            #include <iostream>
            using namespace std;
             
            int map[6][6] = 
            {
            	{0, 0, 0, 0, 0, 0},
            	{0, 7, 0, 0, 0, 0},
            	{0, 3, 8, 0, 0, 0},
            	{0, 8, 1, 0, 0, 0},
            	{0, 2, 7, 4, 4, 0},
            	{0, 4, 5, 2, 6, 5}
            };
             
            int f[6][6];
             
            int _max(int a, int b)
            {
            	if(a >= b)
            		return a;
            	return b;
            }
             
            int main()
            {
            	memset(f, 0, sizeof(f));
            	for(int i=0; i<6; ++i)
            		f[5][i] = map[5][i];
            	for(int i=4; i>=1; --i)
            		for(int j=1; j<=i; ++j)
            			f[i][j] = _max(f[i+1][j], f[i+1][j+1]) + map[i][j];
            	for(int i=1; i<=5; ++i)
            	{
            		for(int j=1; j<=5; ++j)
            		{
            			cout.width(2);
            			cout << f[i][j] << " ";
            		}
            		cout << endl;
            	}
            	cout << f[1][1] << endl;
            }

            結(jié)果如圖:

            sanjiaoxing4

            下一篇會(huì)將裝配線的調(diào)度。

            在我獨(dú)立博客上的原文:http://www.wutianqi.com/?p=2484

            歡迎大家互相學(xué)習(xí),互相進(jìn)步!

            posted on 2011-05-20 07:27 Tanky Woo 閱讀(1733) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            无码专区久久综合久中文字幕| 久久久黄色大片| 欧美一区二区三区久久综| 国产欧美久久久精品影院| 色播久久人人爽人人爽人人片aV| 7国产欧美日韩综合天堂中文久久久久 | 久久亚洲精品国产精品| 色天使久久综合网天天| 99久久精品国产一区二区| 亚洲乱码精品久久久久..| 国内精品久久久久久久97牛牛| 久久久久亚洲精品无码蜜桃| 久久国产精品成人影院| 91精品国产色综久久| 久久人人爽人人澡人人高潮AV| 久久久久黑人强伦姧人妻| 久久久这里只有精品加勒比| 伊人久久大香线蕉亚洲| 精品久久777| 亚洲精品国产第一综合99久久| 亚洲午夜久久久久久久久久| 99久久久国产精品免费无卡顿 | 国産精品久久久久久久| 日本亚洲色大成网站WWW久久| 漂亮人妻被中出中文字幕久久 | 久久精品国产99国产精品| 精品久久久久成人码免费动漫| 人妻少妇久久中文字幕一区二区| 国产91色综合久久免费分享| 久久亚洲国产精品123区| 欧美亚洲色综久久精品国产| 国内精品久久久久久久久电影网| 久久精品综合网| 国产日韩久久免费影院| 青草国产精品久久久久久| 久久国产免费直播| 久久精品国产亚洲精品2020| 热久久国产欧美一区二区精品| 97精品久久天干天天天按摩 | 国内精品久久久久久久久电影网 | 色综合久久久久综合体桃花网 |