五大常用算法之二:動態規劃算法

一、基本概念

?? ?動態規劃過程是:每次決策依賴于當前狀態,又隨即引起狀態的轉移。一個決策序列就是在變化的狀態中產生出來的,所以,這種多階段最優化決策解決問題的過程就稱為動態規劃。

二、基本思想與策略

?? ?基本思想與分治法類似,也是將待求解的問題分解為若干個子問題(階段),按順序求解子階段,前一子問題的解,為后一子問題的求解提供了有用的信息。在求 解任一子問題時,列出各種可能的局部解,通過決策保留那些有可能達到最優的局部解,丟棄其他局部解。依次解決各子問題,最后一個子問題就是初始問題的解。

?? ?由于動態規劃解決的問題多數有重疊子問題這個特點,為減少重復計算,對每一個子問題只解一次,將其不同階段的不同狀態保存在一個二維數組中。

?? ?與分治法最大的差別是:適合于用動態規劃法求解的問題,經分解后得到的子問題往往不是互相獨立的(即下一個子階段的求解是建立在上一個子階段的解的基礎上,進行進一步的求解)。

三、適用的情況

能采用動態規劃求解的問題的一般要具有3個性質:

??? (1) 最優化原理:如果問題的最優解所包含的子問題的解也是最優的,就稱該問題具有最優子結構,即滿足最優化原理。

??? (2) 無后效性:即某階段狀態一旦確定,就不受這個狀態以后決策的影響。也就是說,某狀態以后的過程不會影響以前的狀態,只與當前狀態有關。

?? (3)有重疊子問題:即子問題之間是不獨立的,一個子問題在下一階段決策中可能被多次使用到。(該性質并不是動態規劃適用的必要條件,但是如果沒有這條性質,動態規劃算法同其他算法相比就不具備優勢)

四、求解的基本步驟

?? ? 動態規劃所處理的問題是一個多階段決策問題,一般由初始狀態開始,通過對中間階段決策的選擇,達到結束狀態。這些決策形成了一個決策序列,同時確定了完成整個過程的一條活動路線(通常是求最優的活動路線)。如圖所示。動態規劃的設計都有著一定的模式,一般要經歷以下幾個步驟。

??? 初始狀態→│決策1│→│決策2│→…→│決策n│→結束狀態

?? ? ? ? ? ? ? ? ? ? ?圖1 動態規劃決策過程示意圖

??? (1)劃分階段:按照問題的時間或空間特征,把問題分為若干個階段。在劃分階段時,注意劃分后的階段一定要是有序的或者是可排序的,否則問題就無法求解。

??? (2)確定狀態和狀態變量:將問題發展到各個階段時所處于的各種客觀情況用不同的狀態表示出來。當然,狀態的選擇要滿足無后效性。

??? (3)確定決策并寫出狀態轉移方程:因為決策和狀態轉移有著天然的聯系,狀態轉移就是根據上一階段的狀態和決策來導出本階段的狀態。所以如果確定了決策,狀態轉移方程也就可寫出。但事實上常常是反過來做,根據相鄰兩個階段的狀態之間的關系來確定決策方法和狀態轉移方程。

??? (4)尋找邊界條件:給出的狀態轉移方程是一個遞推式,需要一個遞推的終止條件或邊界條件。

?? ?一般,只要解決問題的階段、狀態和狀態轉移決策確定了,就可以寫出狀態轉移方程(包括邊界條件)。

實際應用中可以按以下幾個簡化的步驟進行設計:

?? ?(1)分析最優解的性質,并刻畫其結構特征。

?? ?(2)遞歸的定義最優解。

?? ?(3)以自底向上或自頂向下的記憶化方式(備忘錄法)計算出最優值

?? ?(4)根據計算最優值時得到的信息,構造問題的最優解

五、算法實現的說明

??? 動態規劃的主要難點在于理論上的設計,也就是上面4個步驟的確定,一旦設計完成,實現部分就會非常簡單。

?? ? 使用動態規劃求解問題,最重要的就是確定動態規劃三要素:

?? ?(1)問題的階段 (2)每個階段的狀態

?? ?(3)從前一個階段轉化到后一個階段之間的遞推關系。

?? ? 遞推關系必須是從次小的問題開始到較大的問題之間的轉化,從這個角度來說,動態規劃往往可以用遞歸程序來實現,不過因為遞推可以充分利用前面保存的子問題的解來減少重復計算,所以對于大規模問題來說,有遞歸不可比擬的優勢,這也是動態規劃算法的核心之處。

?? ?確定了動態規劃的這三要素,整個求解過程就可以用一個最優決策表來描述,最優決策表是一個二維表,其中行表示決策的階段,列表示問題狀態,表格需要填寫的數據一般對應此問題的在某個階段某個狀態下的最優值(如最短路徑,最長公共子序列,最大價值等),填表的過程就是根據遞推關系,從1行1列開始,以行或者列優先的順序,依次填寫表格,最后根據整個表格的數據通過簡單的取舍或者運算求得問題的最優解。

?? ? ? ? ?f(n,m)=max{f(n-1,m), f(n-1,m-w[n])+P(n,m)}

六、動態規劃算法基本框架

代碼
for(j=1; j<=m; j=j+1) // 第一個階段xn[j] = 初始值;for(i=n-1; i>=1; i=i-1)// 其他n-1個階段for(j=1; j>=f(i); j=j+1)//f(i)與i有關的表達式xi[j]=j=max(或min){g(xi-1[j1:j2]), ......, g(xi-1[jk:jk+1])};t = g(x1[j1:j2]); // 由子問題的最優解求解整個問題的最優解的方案

print(x1[j1]);for(i=2; i<=n-1; i=i+1)
{  t = t-xi-1[ji];for(j=1; j>=f(i); j=j+1)if(t=xi[ji])break;
}

(以上內容轉自五大常用算法之二:動態規劃算法)

?

轉載于:https://www.cnblogs.com/showersun/p/4414199.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376088.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376088.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376088.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java 數組處理_JAVA操作數組

使用 Arrays 類操作 Java 中的數組Arrays 類是 Java 中提供的一個工具類&#xff0c;在 java.util 包中。該類中包含了一些方法用來直接操作數組&#xff0c;比如可直接實現數組的排序、搜索等Arrays 中常用的方法&#xff1a;1、 排序語法&#xff1a; Arrays.sort(數組名);可…

VB調用VC DLL函數

—————————————————————————VC部分—————————————————————————————————————聲明 ******************************************************************************************************** extern "C&q…

java拆裝_JAVA線性表拆解

線性表(List)是一種線性結構。其特點是數據元素直線的線性關系。1.線性表抽象類定義public abstract class AbsList implements Iterable&#xff0c;List{protected int length;abstract public T get(int i); //返回第i(i≥0)個元素abstract public boolean set(int i, T x);…

display:none;與visibility:hidden;的區別

display:none;不會占用任何空間 visibility:hidden;會占用隱藏前的空間大小轉載于:https://www.cnblogs.com/yaser/p/4414825.html

(轉)起點

要想做Java程序員&#xff0c;并不需要必須是計算機專業出身。很多人不是計算機專業卻也成為計算機高手&#xff1b;有的高中生都已經小有所成&#xff0c;可稱得上是合格程序員了&#xff1b;甚至很多學校初中生都能寫出漂亮的應用程序。所以&#xff0c;Java程序員的起點要求…

以太網 數據包速率計算方法

以太網 數據包速率計算方法 我們知道1個千兆端口的線速包轉發率是1.4881MPPS, 百兆端口的線速包轉發率是0.14881MPPS&#xff0c;這是國際標準&#xff0c;但是如何得來的呢&#xff1f; 具體的數據包在傳輸過程中會在每個包的前面加上64個&#xff08;前導符&#xff09;pream…

linux 多個java_linux 同時出現兩個java進程,新手~ 請詳細說明,這個是怎么回事。 我就裝了一個jdk...

首先Tomcat是用java開發的&#xff0c;所以它的開始和停止的命令都是用java來執行的。你執行一下ps -ef |grep tomcat如果輸出&#xff1a;sun 5144 1 0 10:21 pts/1 00:00:06 /java/jdk/bin/java -Djava.util.logging.managerorg.apache.juli.ClassLoaderLogManager -Djava.en…

ISP與IAP的區別

轉&#xff1a; ISP&#xff08;In-System Programming&#xff09;在系統可編程&#xff0c;指電路板上的空白器件可以編程寫入最終用戶代碼&#xff0c; 而不需要從電路板上取下器件&#xff0c;已經編程的器件也可以用ISP方式擦除或再編程。IAP&#xff08;In-Application P…

【轉】手把手實現企業級開源監控軟件cacti+nagios+ntop整合(圖解)

http://freeze.blog.51cto.com/1846439/386828轉載于:https://www.cnblogs.com/nhlinkin/p/3595532.html

【BZOJ】【1041】【HAOI2008】圓周上的點

數學 orz hzwer 完全不會做…… 很糾結啊&#xff0c;如果將來再遇到這種題&#xff0c;還是很難下手啊…… 引用題解&#xff1a; 【分析】&#xff1a; 樣例圖示&#xff1a; 首先,最暴力的算法顯而易見&#xff1a;枚舉x軸上的每個點&#xff0c;帶入圓的方程&#xff0c;檢…

php authcode java_PHP(authcode)加密解密

//************************加密解密*************************//** $string&#xff1a; 明文 或 密文* $operation&#xff1a;DECODE表示解密,其它表示加密* $key&#xff1a; 密匙* $expiry&#xff1a;密文有效期* */function authcode($string, $operation DECODE, $key…

nginx環境下搭建nagios 3.5.0,及配置pnp4nagios畫圖

本文基于《LNMP最新源碼安裝腳本》,Nagios依賴PHP環境和perl環境&#xff0c;由于Nginx不支持Perl的CGI&#xff0c;需先來搭建Perl環境&#xff0c;Nagios原理介紹略。一、下載最新穩定源碼包和Perl腳本wget http://www.cpan.org/modules/by-module/FCGI/FCGI-0.74.tar.gzwget…

python indexerror怎么辦_Python IndexError:使用列表作為可迭代對象時...

這是代碼&#xff1a;import math as mprimeproduct 5397346292805549782720214077673687806275517530364350655459511599582614290primes [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127…

【Android】配置APK開發環境

【Android】配置APK開發環境1.安裝java jdk去oracle公司下載jdk-7u15-windows-i586.exehttp://www.oracle.com/technetwork/cn/java/javase/downloads/jdk7-downloads-1880260-zhs.html---C:\Documents and Settings\XXXX>java -versionjava version "1.7.0_15"Ja…

C++細節系列(零):零散記錄

老規矩&#xff1a;記錄細節&#xff0c;等待空余&#xff0c;再進行整理。 1&#xff1a;const,static,const static成員初始化。 1、const成員&#xff1a;只能在構造函數后的初始化列表中初始化 2、static成員&#xff1a;初始化在類外&#xff0c;且不加static修飾。 3、co…

java js highcharts_Highcharts.js -純javasctipt圖表庫初體驗

一.highcharts簡介以及引入highcharts作為免費提供給個人學習、個人網站和非商業用途使用的前端圖表演示插件的確使用起來十分方便和輕便。在我最近完成一個需求的時候用到了它&#xff0c; 它的兼容性也很強&#xff0c;其在標準(W3C標準)瀏覽器中使用SVG技術渲染圖形&#xf…

PHP:class const

const變量經常被當做常量用在php的類中&#xff0c;隱含的意思是這個變量是常量&#xff0c;不能被修改。編譯器會自動檢測&#xff0c;如果被賦值會被提示錯誤警告。 正確實例1&#xff1a; <?php class test {const ERRNO 100; } echo test::ERRNO."\n"; 輸出…

java web核心知識_JAVA web 相關知識點

1&#xff1a; web的三個核心標準&#xff1a;URL&#xff1a; http VS httpsHTTP: 通信協議&#xff0c;客戶端&#xff0f;服務器端信息交互方式; 特點是無狀態&#xff1b;HTML:2: HTTP 協議&#xff1a;http是通用的&#xff0c;無狀態的&#xff0c;面向對象的協議。H…

20135127陶俊杰 實驗一

北京電子科技學院(BESTI) 《Java程序設計》課實驗報告 班 級&#xff1a;201351 姓名及學號&#xff1a;陶俊杰 20135127 指導教師&#xff1a;婁佳鵬 必修/選修&#xff1a;選修 實驗日期&#xff1a; 2015年4月16日 實驗時間&…