ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:43.70KB ,
资源ID:6507332      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6507332.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ACM课程论文详解动态规划.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ACM课程论文详解动态规划.docx

1、ACM课程论文详解动态规划暨 南 大 学本科生课程论文论文题目: 动态规划算法的应用 学 院: 珠海学院 学 系: 计算机科学系 专 业: 计算机科学与技术 课程名称: ACM 学生姓名: 赵莎 学 号: 2007052391 指导教师: 陈双平 2009年 6 月 10 日动态规划算法试析动态规划算法在ACM中的应用摘 要 通过实例,分析了动态规划算法在ACM中的应用。关键词 ACM; 动态规划算法; DPDynamic programming algorithmAnalysis the dynamic programming algorithm in the application of

2、ACMAbstract The application of Dynamic programming algorithmhas been studiedKeywordsACM; Dynamic programming algorithm; DP1. 绪论1.1综述1动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of o

3、ptimality),把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法动态规划。1957年出版了他的名著Dynamic Programming,这是该领域的第一本著作。动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用。例如最短路线、库存管理、资源分配、设备更新、排序、装载等问题,用动态规划方法比用其它方法求解更为方便。虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但是一些与时间无关的静态规划(如线性规划、非线性规划),只要人为地引进时间因素,把它视为多阶段决策过程,也可以用动态规划方法方便地求解

4、。 动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。不象前面所述的那些搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。因此读者在学习时,除了要对基本概念和方法正确理解外,必须具体问题具体分析处理,以丰富的想象力去建立模型,用创造性的技巧去求解。我们也可以通过对若干有代表性的问题的动态规划算法进行分析、讨论,逐渐学会并掌握这一设计方法。1.2研究框

5、架本文将探讨动态规划算法在ACM解题中的应用,在文中首先介绍动态规划算法的相关知识,然后通过实际的例子演示动态规划算法在ACM中的应用。1.3术语说明Dynamic programming algorithm 动态规划算法2动态规划算法介绍12.1基本模型多阶段决策过程的最优化问题。在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。当然,各个阶段决策的选取不是任意确定的,它依赖于当前面临的状态,又影响以后的发展,当各个阶段决策确定后,就组成一个决策序列,因而也就确定了整个过程的一条活动路线,如图所示

6、:(看词条图) 这种把一个问题看作是一个前后关联具有链状结构的多阶段过程就称为多阶段决策过程,这种问题就称为多阶段决策问题。2.2状态 决策12.2.1 状态我们一般在动规的时候所用到的一些数组,也就是用来存储每个状态的最优值的。我们就从动态规划的要诀,也就是核心部分“状态”开始,来逐步了解动态规划。有时候当前状态确定后,以前状态就已经确定,则无需枚举.2.2.2决策当前状态通过决策,回到了以前状态.可见决策其实就是状态之间的桥梁。而以前状态也就决定了当前状态的情况。数字三角形的决策就是选择相邻的两个以前状态的最优值。2.3动态规划算法的应用1一、动态规划的概念近年来,涉及动态规划的各种竞赛题

7、越来越多,每一年的NOI几乎都至少有一道题目需要用动态规划的方法来解决;而竞赛对选手运用动态规划知识的要求也越来越高,已经不再停留于简单的递推和建模上了。要了解动态规划的概念,首先要知道什么是多阶段决策问题。1. 多阶段决策问题如果一类活动过程可以分为若干个互相联系的阶段,在每一个阶段都需作出决策(采取措施),一个阶段的决策确定以后,常常影响到下一个阶段的决策,从而就完全确定了一个过程的活动路线,则称它为多阶段决策问题。各个阶段的决策构成一个决策序列,称为一个策略。每一个阶段都有若干个决策可供选择,因而就有许多策略供我们选取,对应于一个策略可以确定活动的效果,这个效果可以用数量来确定。策略不同

8、,效果也不同,多阶段决策问题,就是要在可以选择的那些策略中间,选取一个最优策略,使在预定的标准下达到最好的效果.2动态规划问题中的术语阶段:把所给求解问题的过程恰当地分成若干个相互联系的阶段,以便于求解,过程不同,阶段数就可能不同描述阶段的变量称为阶段变量。在多数情况下,阶段变量是离散的,用k表示。此外,也有阶段变量是连续的情形。如果过程可以在任何时刻作出决策,且在任意两个不同的时刻之间允许有无穷多个决策时,阶段变量就是连续的。状态:状态表示每个阶段开始面临的自然状况或客观条件,它不以人们的主观意志为转移,也称为不可控因素。在上面的例子中状态就是某阶段的出发位置,它既是该阶段某路的起点,同时又

9、是前一阶段某支路的终点。过程的状态通常可以用一个或一组数来描述,称为状态变量。一般,状态是离散的,但有时为了方便也将状态取成连续的。当然,在现实生活中,由于变量形式的限制,所有的状态都是离散的,但从分析的观点,有时将状态作为连续的处理将会有很大的好处。此外,状态可以有多个分量(多维情形),因而用向量来代表;而且在每个阶段的状态维数可以不同。当过程按所有可能不同的方式发展时,过程各段的状态变量将在某一确定的范围内取值。状态变量取值的集合称为状态集合。无后效性:我们要求状态具有下面的性质:如果给定某一阶段的状态,则在这一阶段以后过程的发展不受这阶段以前各段状态的影响,所有各阶段都确定时,整个过程也

10、就确定了。换句话说,过程的每一次实现可以用一个状态序列表示,在前面的例子中每阶段的状态是该线路的始点,确定了这些点的序列,整个线路也就完全确定。从某一阶段以后的线路开始,当这段的始点给定时,不受以前线路(所通过的点)的影响。状态的这个性质意味着过程的历史只能通过当前的状态去影响它的未来的发展,这个性质称为无后效性。决策:一个阶段的状态给定以后,从该状态演变到下一阶段某个状态的一种选择(行动)称为决策。在最优控制中,也称为控制。在许多间题中,决策可以自然而然地表示为一个数或一组数。不同的决策对应着不同的数值。描述决策的变量称决策变量,因状态满足无后效性,故在每个阶段选择决策时只需考虑当前的状态而

11、无须考虑过程的历史。决策变量的范围称为允许决策集合。策略:由每个阶段的决策组成的序列称为策略。对于每一个实际的多阶段决策过程,可供选取的策略有一定的范围限制,这个范围称为允许策略集合。允许策略集合中达到最优效果的策略称为最优策略。给定k阶段状态变量x(k)的值后,如果这一阶段的决策变量一经确定,第k+1阶段的状态变量x(k+1)也就完全确定,即x(k+1)的值随x(k)和第k阶段的决策u(k)的值变化而变化,那么可以把这一关系看成(x(k),u(k)与x(k+1)确定的对应关系,用x(k+1)=Tk(x(k),u(k)表示。这是从k阶段到k+1阶段的状态转移规律,称为状态转移方程。最优性原理:

12、 作为整个过程的最优策略,它满足:相对前面决策所形成的状态而言,余下的子策略必然构成“最优子策略”。2.4动态规划算法的问题求解模式 动态规划算法所处理的问题是一个多阶段决策问题,一般由初始状态开始,通过对中间阶段决策的选择,达到结束状态.这些决策形成了一个决策序列,同时确定了完成整个过程的一条活动路线(通常是求最优的活动路线)。动态规划的设计一般都有着固定的模式,一般要经历以下几个步骤:又可以系统的解释为以下具体的步骤:(1)找出最优解的性质,并刻画其结构特征。(2)递归地定义最优值。(3)以自底向上的方式计算出最优值。(4)根据计算最优值时得到的信息,构造一个最优解。 其中(1)(3)步是

13、动态规划算法的基本步骤。在只需要求出最优值的情形,步骤(4)可以省去。若需要求出问题的一个最优解,则必须执行步骤(4)。此时,在步骤(3)中计算最优值时,通常需记录更多的信息,以便在步骤(4)中,根据所记录的信息,快速构造出一个最优解。2.4动态规划问题的基本特征动态规划算法的有效性依赖于问题本身所具有的两个重要性质: 1、最优子结构:当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质。 2、重叠子问题:在用递归算法自顶向下解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只解一次,而后将其解保存在一个

14、表格中,在以后尽可能多地利用这些子问题的解。当再次需要计算已经计算过的子问题时,只是在表格中简单的查看一下结果,从而获得较高的解题效率。2.4动态规划的基本思想如果各个子问题不是独立的,不同的子问题的个数只是多项式量级,如果我们能够保存已经解决的子问题的答案,而在需要的时候再找出已求得的答案,这样就可以避免大量的重复计算。由此而来的基本思路是,用一个表记录所有已解决的子问题的答案,不管该问题以后是否被用到,只要它被计算过,就将其结果填入表中。 2.5应用动态规划的算法21) 许多字符串操作算法如最长公共子列、最长递增子列、最长公共字串; 2) 将动态规划用于图的树分解,可以有效解决有界树宽图的

15、生成树等许多与图相关的算法问题; 3) 决定是否及如何可以通过某一特定上下文无关文法产生给定字符串的Cocke-Younger-Kasami (CYK)算法; 4) 计算机国际象棋中转换表和驳斥表的使用; 5) Viterbi算法(用于隐式马尔可夫模型); 6) Earley算法(一类图表分析器); 7) Needleman-Wunsch及其他生物信息学中使用的算法,包括序列比对、结构比对、RNA结构预测; 8) Levenshtein距离(编辑距离); 9) 弗洛伊德最短路径算法; 10) 连锁矩阵乘法次序优化; 11) 子集求和、背包问题和分治问题的伪多项式时间算法; 12) 计算两个时间

16、序列全局距离的动态时间规整算法; 13) 关系型数据库的查询优化的Selinger(又名System R)算法; 14) 评价B样条曲线的De Boor算法; 15) 用于解决板球运动中断问题的Duckworth-Lewis方法; 16) 价值迭代法求解马尔可夫决策过程; 17) 一些图形图像边缘以下的选择方法,如“磁铁”选择工具在Photoshop; 18) 间隔调度; 19) 自动换行; 20) 巡回旅行商问题(又称邮差问题或货担郎问题); 21) 分段最小二乘法; 22) 音乐信息检索跟踪。 3解题实例3.1解题一原题可参见以下网址: DescriptionIn how many way

17、s can you tile a 3xn rectangle with 2x1 dominoes? Here is a sample tiling of a 3x12 rectangle. InputInput consists of several test cases followed by a line containing -1. Each test case is a line containing an integer 0 = n = 30. OutputFor each test case, output one integer number giving the number

18、of possible tilings.Sample Input2812-1Sample Output31532131问题分析与解决:利用动态规划解题的典型用例。问题的关键是找到怎样的递归过程,然后把这些过程的从递归的底部向上一层一层的表示出来。也就是说必须在对递归和实现有一个深刻的理解才能做好动态规划的题目。题目是让你计算出用2*1的一个长方体摆成一个3*n的长方体。例如下图:就是一个用2*1的长方体堆积成3*12的长方体的一个例子。输入包括一个数字n。当n=奇数的时候,很显然是有0种摆设的方法的。当n=偶数的时候。我们用一个数组a 来记录堆积成3*(2n)的种类。(a的下表是从1开始的)。

19、当首先我们可以很显然的发现a1=3;所以在计算之前我们首先赋值a1=3;并且我们发现这三个不能再分成更小的了。而其有2*1组成的我们发现不能分成更小的个数都是2个。例如n=4只有下面一个!以及把他倒立过来。那么对于输入的偶数n我们就可以计算出F(n)=(i=1?=3:2)*an/2-i)(i从(n/2+1到1);这一直这样循环就可以了!附源代码:#includeint main() int n,a200,init,i,j,sum; scanf(%d,&n); a1=3; while(n!=-1) if(n=0) sum=1; else if(n%2=1) sum=0; else if(n=2)

20、 sum=3; else sum=0; init=3; n=n/2; for(i=1;in;i+) if(in-1) sum+=2*ai; else sum+=3*ai; ai+1=0; for(j=1;j=i;j+) if(ji) ai+1=ai+1+2*aj; else ai+1=ai+1+3*aj; ai+1+=2; sum+=2; printf(%dn,sum); scanf(%d,&n); return 0;3.2解题二原题可以参见以下网址: DescriptionFarmer John has purchased a lush new rectangular pasture com

21、posed of M by N (1 M 12; 1 N 12) square parcels. He wants to grow some yummy corn for the cows on a number of squares. Regrettably, some of the squares are infertile and cant be planted. Canny FJ knows that the cows dislike eating close to each other, so when choosing which squares to plant, he avoi

22、ds choosing squares that are adjacent; no two chosen squares share an edge. He has not yet made the final choice as to which squares to plant.Being a very open-minded man, Farmer John wants to consider all possible options for how to choose the squares for planting. He is so open-minded that he cons

23、iders choosing no squares as a valid option! Please help Farmer John determine the number of ways he can choose the squares to plant.InputLine 1: Two space-separated integers: M and N Lines 2.M+1: Line i+1 describes row i of the pasture with N space-separated integers indicating whether a square is

24、fertile (1 for fertile, 0 for infertile)OutputLine 1: One integer: the number of ways that FJ can choose the squares modulo 100,000,000.Sample Input2 31 1 10 1 0Sample Output9HintNumber the squares as follows:1 2 3 4 There are four ways to plant only on one squares (1, 2, 3, or 4), three ways to pla

25、nt on two squares (13, 14, or 34), 1 way to plant on three squares (134), and one way to plant on no squares. 4+3+1+1=9.问题分析与解决:题意描述:John带着他的奶牛去牧场,牧场是一块长方形的地,并且被划分成r(0=r=12)行c(1=c=12)列个大小相同的正方形,有草的正方形用1表示,没有草的正方形用0表示。John 想把奶牛们都安排在有草的正方形里,并且任意两头奶牛不能在相邻的格子里。给定牧场的情况,问有多少中符合要求的安排方案,奶牛的数目没有限制。 算法分析:可以使用

26、状态压缩的动态规划,把每一行的安排情况看成一个二进制数作为一个状态,如果这一行的某一列安排了一头奶牛,对应的二进制位就是1,如果没有安排,那么这个二进制位就是0。采用这种表示方法时,粗略地看,对于同一行来说,可能的状态有212种,但实际上并没有这么多,首先如果某个状态表示里出现了两个连续的1,那么这个状态永远是非法的,可以去掉,这样处理之后剩下的可能合法状态只有377个。在这些筛选出来的状态中,根据牧场的情况,可能还有非法状态(因为有些格子没有草,状态的对应位就不能是1)。令dpij表示第i行的状态为j时有多少中可能的安排方法,那么状态转移方程可以是:如果j是合法状态:dpij = Sumdp

27、i-1k其中k要满足k&j = 0,以使奶牛不被安排在上下两个相邻的格子里。如果j是非法状态:dpij = 0;这样总的状态数最多为12*377个,每次状态转移的操作步数最多为377,在最坏情况下总的操作步数为:12*377*377。附源代码:#include struct Line int num; int state1024;/ int n11024;line15;int dp151024=0;int m, n;void GetState( int i, int tmp ) int j; int num = 0; for ( j=0; j(1n); j+ ) if ( (j1)&j ) c

28、ontinue; if ( tmp&j ) continue;/* int m = j; linei.n1num = m%2; while ( m=(m1) ) linei.n1num += m%2;*/ linei.statenum+ = j; linei.num = num;int main () int i, j, k; int a; scanf(%d %d, &m, &n ); for ( i=0; im; i+ ) int tmp = 0; for ( j=0; jn; j+ ) scanf(%d, &a ); tmp = (tmp1) + 1-a; GetState( i, tmp

29、 ); for ( i=0; iline0.num; i+ ) dp0i = 1; for ( i=1; im; i+ ) for ( j=0; jlinei.num; j+ ) dpij = 0; for ( k=0; klinei-1.num; k+ ) if ( (linei.statej)&(linei-1.statek) ) continue; dpij += dpi-1k; int ans = 0; for ( i=0; ilinem-1.num; i+ ) ans = (ans+dpm-1i)%100000000; printf(%dn, ans ); return 0;3.3解题三原题可参见以下网址: DescriptionThe cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone (also known as Rock, Paper, Scis

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1