版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、划是最化的一种新的算法方法。由于各种的性不同样,确定最解的条件也互不同样,所以划的没法不同样的,有各具特色的表示方式。不存在一种全能的划算法。但是能够通若干有代表性的的划算法行,学会一方法。多阶段决策过程最优化问题划的基本模型在生活中,有一活的程,由于它的特别性,可将程分成若干个互相系的段,在它的每一段都需要作出决策,从而使整个程达到最好的活收效。所以各个段决策的取不能够任意确定,它依于当前面的状,又影响今后的展。当各个段决策确定后,就成一个决策序列,所以也就确定了整个程的一条活路。种把一个看做是一个前后关拥有状构的多段程就称多段决策程,种称多段决策最化。【例1】最短路径。中出了一个地,地中每
2、个点代表一个城市,两个城市的代表道路,上的数代表道路的度。在,想从城市A到达城市E,怎走行程最短,最短行程的度是多少?【解析】把从A到E的全程分成四个段,用k表示段量,第1段有一个初始状A,两条可供的支路ABl、AB2;第2段有两个初始状B1、B2,B1有三条可供的支路,B2有两条可供的支路。用dk(xk,xk+1)表示在第k段由初始状xk到下段的初始状xk+1的路径距离,Fk(xk)表示从第k段的xk到点E的最短距离,利用倒推方法求解A到E的最短距离。详细算程以下:S1:K=4,有:F4(D1)=3,F4(D2)=4,F4(D3)=3S2:K=3,有:F3(C1)=mind3(C1,D1)+
3、F4(D1),d3(C1,D2)+F4(d2)=min8,10=8F3(C2)=d3(C2,D1)+f4(D1)=5+3=8F3(C3)=d3(C3,D3)+f4(D3)=8+3=11F3(C4)=d3(C4,D3)+f4(D3)=3+3=6S2:K=2,有:F2(B1)=mind2(B1,C1)+F3(C1),d2(B1,C2)+f3(C2),d2(B1,C3)+F3(C3)=min9,12,14=9F2(m)=mind2(B2,c2)+f3(C2),d2(B2,C4)+F3(C4)=min16,10=10S4:k=1,有:F1(A)=mind1(A,B1)+F2(B1),d1(A,B2)+
4、F2(B2)=min13,13=13所以由A点到E点的全程的最短路径AB2一C4D3E。最短行程度13。从以上程能够看出,每个段中,都求出本段的各个初始状到程点E的最短路径和最短距离,当逆序倒推到程起点A,便获取了全程的最短路径及最短距离,同附获取了一最果(即各段的各状到点E的最果)。在上例的多阶段决策问题中,各个阶段采用的决策,一般来说是与时间有关的,决策依赖于当前状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生出来的,故有“动向”的含义,称这类解决多阶段决策最优化问题的方法为动向规划方法。依照上例解析和动向规划的基本看法,能够获取动向规划的基本模型以下:确定问题的决策对象。对
5、决策过程划分阶段。对各阶段确定状态变量。依照状态变量确定开销函数和目标函数。建立各阶段状态变量的转移过程,确定状态转移方程。动向规划的基本知识动向规划是研究一类最优化问题的方法,在经济、工程技术、企业管理、工农业生产及军事等领域中都有广泛的应用。近来几年来,在ACM/ICPC中,使用动向规划(或部分应用动向规划思想)求解的题不但常有,而且形式也多种多样。而在与此周边的各种信息学竞赛中,应用动向规划解题已经成为一种趋势,这和动向规划的优势不没关系。、动向规划的常用名词在学习动向规划以前,先得对下面的名词有所认识。本书将标准名词作了一些简化,便于大家更好的理解。(1)状态(smte)关于一个问题,
6、所有可能到达的情况(包括初始情况和目标情况)都称为这个问题的一个状态。状态变量(sk)对每个状态k关系一个状态变量sk,它的值表示状态k所对应的问题的当前解值。(3)决策(decision)决策是一种选择,关于每一个状态而言,你都能够选择某一种路线或方法,从而到达下一个状态。决策变量(dk)在状态k下的决策变量dk的值表示对状态k当前所做出的决策。策略策略是一个决策的会集,在我解决的候,我将一系列决策下来,就是一个策略,其中足某些最条件的策略称之最策略。(6)状移函数(t)从一个状到另一个状,能够依照必然的来前。我用一个函数t来描述的,它将状i和决策量di照射到另一个状j,t(i,di)=j(
7、7)状移方程(f)状移方程f描述了状量之的数学关系。一般来,与最化相,状移方程表示si的最化的条件,也许是状i所的最解的算公式,用代数式表示就是:si=f(sj,dj)|i=t(j,dj),决策量dj所有可行的取)、最化原理1951年美国数学家RBellman等人,依照一多段的特色,把多段决策一系列互相系的段,此后逐个加以解决。一些静模型,只要人地引“”因素,分成段,就可以化成多段的模型,用划方法去理。与此同,他提出认识决的“最化原理”(Principleofoptimality):“一个程的最决策拥有的性:即无其初始状和初始决策如何,其今后策略以第一个决策所形成的状作初始状的程而言,必组成最
8、策略”。言之,一个最策略的子策略,于它的初和而言也必是最的。个“最化原理”若是用数学化一点的言来描述的,就是:假认识决某一化,需要依次作出n个决策D1,D2,Dn,如若个决策序列是最的,于任何一个整数k,1kn,不前面k个决策是怎的,今后的最决策只取决于由前面决策所确定的当前状,即今后的决策Dk+1,Dk+2,Dn也是最的。最化原理是划的基。任何一个,若是失去了个最化原理的支持,就不能能用划方法算。、什么是划划是运筹学的一个分支。与其划是一种算法,不如是一种思方法来得更切。因划没有固定的框架,即即是用到同一道上,也能够建立多种形式的求解算法。多式上的算法,比方求源最短路径的Dijkstra算法
9、、广度先搜寻算法,都浸透着划的思想。有多数学,表面上看起来与划牛不相及,但是其求解思想与划是完满一致的。所以,划不像深度或广度先那能够供应一套模式,需要的候,取来就可以使用;它必详细行详细解析理,需要丰富的想象力去建立模型,需要造性的思想去求解。、划适于解决什么的正确地,划不是全能的,它只适于解决必然条件的最策略。也许,大家听到这个结论会很无望:其实,这个结论并没有减少动向规划的光辉,由于属于上面范围内的问题好多,还有好多看似不是这个范围中的问题都能够转变成这类问题。上面所说的“满足必然条件”主要指下面两点:状态必定满足最优化原理;状态必定满足无后效性。所谓的无后效性是指:“过去的决策只能经过
10、当前状态影响未来的发展,当前的状态是对过去决策的总结”。这条特色说明什么呢?它说明动向规划适于解决当前决讲和过去状态没关的问题。状态,出现在策略的任何一个地址,它的地位都是同样的,都能够推行同样的决策。这就是无后效性的内涵。、用动向规划解题的好处说了这么多的动向规划,它终究给我们解题能带来什么好处呢?其实动向规划的最大优势在于它拥有极高的效率,而且动向规划还有其他的优势,比方:动向规划能够得出一系列解,算法清楚简略,程序易编、易调,等等。最优化原理与无后效性上面已经介绍了动向规划模型的基本组成,现在需要解决的问题是:什么样的能够采用动向规划的方法求解?“多阶段决策问题”才一般来说,能够采用动向
11、规划方法求解的问题必定满足.最优化原理和.无后效性原则。动向规划的最优化原理。作为整个过程的最优策略拥有以下性质:无论过去的状态和决策如何,对前面的决策所形成的当前状态而言,余下的诸决策必定组成最优策略。能够平时地理解为子问题的局部最优将以致整个问题的全局最优,即问题拥有最优子构造的性质,也就是说一个问题的最优解只取决于其子问题的最优解,非最优解对问题的求解没有影响。在例题1最短路径问题中,A到E的最优路径上的任一点到终点E的路径也必然是该点到终点E的一条最优路径,满足最优化原理。下面来谈论其他一个问题。【例题2】余数最少的路径。以下列图,有4个点,分别是A、B、C、D,相邻两点用两条连线C2
12、k,C2k-1(1k表3)示两条通行的道路。连线上的数字表示道路的长度。定义从A到D的所有路径中,长度除以4所得余数最小的路径为最优路径。求一条最优路径。【解析】在这个问题中,若是还依照例题的最优取值能够由B的最优取值来确定,而B1中的方法去求解就会发生错误。依照例题1的思想,的最优取值为(1+3)mod4=0,所以A的最优值应为A2,而实质上,路径C1C3C5可得最优值为(2+1+1)mod4=0,所以,B的最优路径其实不是A的最优路径的子路径,也就是说,A的最优取值不是由B的最优取值决定的,即其不满足最优化原理,问题不拥有最优子构造的性质。因此可知,其实不是所有的“决策问题”都能够用“动向
13、规划”来解决,运用“动向规划”来办理问题必定满足最优化原理。动向规划的无后效性原则。所谓无后效性原则,指的是这样一种性质:某阶段的状态一旦确定,则今后过程的演变不再受此前各状态及决策的影响。也就是说,“未来与过去没关”,当前的状态是此前历史的一个完满总结,此前的历史只能经过当前的状态去影响过程未来的演变。详细地说,若是一个问题被划分各个阶段此后,阶段I中的状态只能由阶段I+1中的状态经过状态转移方程得来,与其他状态没有关系,特别是与未发生的状态没有关系,这就是无后效性。从图论的角度去考虑,若是把这个问题中的状态定义成图中的极点,两个状态之间的转移定义为边,转移过程中的权值增量定义为边的权值,则
14、组成一个有向无环加权图,所以,这个图能够进行“拓扑排序”,最少能够按他们拓扑排序的次序去划分阶段。看一看下面的两个详细例子。【例题3】货郎担问题。关于平面给定的n个点,编程确定一条连接各点的、闭合的旅行路线问题。图中给出了7个点的情况问题的解。【例题4】旅行路线问题。在货郎担问题的基础上,若规定这类旅行路线先从最左边开始,严格地由左至右到最右边的点,此后再严格地由右至左到出发点,求整个行程最短的路径长度。图中给出了个点问题的解。例3图货郎担问题例4图旅行路线图【解析】这两个问题看起来很特别相似,但实质上是完满不同样的。为了方便谈论,能够将每个极点标记号码。由于必然经过最右边的极点7,所以一条路
15、(P1P2)能够看做两条路(P17)与(P27)的结合。所以,这个题目的状态能够用两条道路结合的形式表示。能够把这些状态中,两条路中初步极点同样的状态归于一个阶段,设为阶段P1,P2。那么,关于旅行路线问题来说,阶段P1,P2若是能够由阶段Q1,Q2推出,则必定满足的条件就是:PlQ1或P20且存在1in使k-wi0,0否则。有了计算各个子问题的最优值的递归式,我们就可以直接编写对应的程序。下述的函数knapsack是输入背包的负重能力k,返回对应的子背包问题的最优值sk:functionknapsack(k:integer):integer;beginknapsack:=0;fori:=1t
16、ondoifk-wi=0thenbegint:=knapsack(k-wi)+vi;ifknapsack=0thenbegint:=memorized_knapsack(k-Wi)+Viifsk=0thenbegint:=sj-wi+vi;ifsj=0thenbegint:=sj-wi+vi;ifsjtthensj:=t;end;end;/主程序beginread_data;knapsack_order;writeln(sm);end.若是想知道选择了哪些物品,那么应将程序作些改动,详细就是对选中的物品做一标记。见参照程序,其中的数据输入采用文件输入,输入文件为bbinput.txt(第1行为
17、背包负重能力和物品种数,第2行为每种物品的价值,第三行为每种物品的重量)。动向规划的正向思想法正向思想法是指从初始状态或界线状态出发,利用某种规则不断到达新的状态,直到问题目标状态的方法。动向规划的正向思想法,正是从已知最优值的初始状态或界线状态开始,依照必然的次序遍历整个状态空间,递推出每个状态所对应问题的最优值。提出动向规划的正向思想法的根根源因,是为了摆脱逆向思想法中间那种将大问题转变成子问题的思想框框,供应一种新的思想方式。在正向思想法中,我们不再划分原问题和子问题,将动向规划的过程看作是从状态到状态的转移。我们将所有的状态构造出一个状态空间,并在状态空间中设想一个状态网络,若对两个状
18、态i,j,存在决策变量di使t(i,di)=j,则向状态网络增加有向边。给定己知最优值的初始状态或界线状态,我们能够沿着有向边推行到未知最优值的新状态,利用状态转移方程获取新状态的状态变量的最优值。我们能够用这类方式遍历整个状态空间,获取每个状态的状态变量的最优值。由于正向思想法中不再划分原问题、子问题、子子问题,所以我们不再依照问题被递归调用求解的相反次序的方法确定状态最优值的计算次序。从上面我们知道能够依照状态的拓扑序列来计算每个状态的最优值,于是我们用一个新的名词“阶段”来描述在状态空间遍历的过程中,各个状态最优值的计算次序。我们将每个状态和一个阶段挂钩,前一个阶段的状态先计算,后一个阶
19、段的状态后计算。有的时候我们甚至将一组状态和一个阶段挂钩,前一个阶段的那组状态先计算,后一个阶段的那组状态后计算,而在同一个阶段内,那些状态的计算次序能够是任意的。动向规划的正向思想法的要点可归纳为以下三个步骤:构造状态网络;依照状态转移关系和状态转移方程建立最优值的递推计算式:按阶段的先后次序计算每个状态的最优值。在下一节“最短路问题”中间,我们将结合最短路问题来示范动向规划的正向思想法。动向规划的正向思想法带给我们什么启示呢?动向规划需要按阶段遍历整个状态空间,因此动向规划的效率取决于状态空间的大小和计算每个状态最优值的开销:若是状态空间的大小是多项式的,那么应用动向规划的算法就是多项式时
20、间的;若是状态空间的大小是指数的,那么应用动向规划的算法也是指数时间的。所以,找一个好的状态划分对动向规划的效率是至关重要的。将这个结论应用到逆向思想上,我们得出以下结果:一个问题的最优子构造经常表示了动向规划的状态空间。典型的情况是,某一个特定问题可有几类“自然”的子问题,不同样的子问题经常意味着不同样的最优子构造,从而我们获取不同样的状态划分方案。但是由这些不同样的状态获取的算法的效率可能差别极大。比方,某个问题的输入是一个有序序列,有两类“自然”的子问题,一类子问题的输入是原问题输入序列的所有子序列,另一类子问题的输入是原问题输入序列的任意元素组成的新序列。显然若我们采用后者的最优子构造
21、来建立状态,它的状态空间必然远远大于基于前者的状态空间。那末基于后者的状态空间的动向规划则要解好多不用要的问题,使得算法的效率突然下降。从动向规划的正向思想法的解析能够看出,我们从已知最优值的初始状态和界线状态出发,利用最优化原理,一步一步向未知的目标状态推进,直到目标状态的最优值解决。这类“从己知推行到未知”的思想,正是动向规划正向思想法的精髓。大家在运用动向规划的正向思想法时若是能掌握这一点,那么就能达到应用自如的境地。在应用动向规划求解的问题的过程中,希望读者能够注意从题目的解析中意会:应用动向规划解题是富于技巧和创立性的,没有固定的模式可套;题目出现的形式多种多样,而且大多数表面上与动
22、向规划看不出直接的联系。只有在充分掌握其思想精髓的前提下英勇联想,才能达到驾轻就熟,灵便运用的境地。动向规划设计方法的一般模式动向规划所办理的问题是一个多阶段决策问题,一般由初始状态开始,经过对中间阶段决策的选择,达到结束状态。这些决策形成了一个决策序列,同时确定了完成整个过程的一条活动路线(平时是求最优的活动路线)。以下列图。动向规划的设计都有着必然的模式,一般要经历以下几个步骤。初始状决策决策决策束状1划决策程表示划分阶段:,依照问题的时间或空间特色,把问题分为若干个阶段。在划分阶段时,注意划分后的阶段必然若是有序的也许是可排序的,否则问题就没法求解。(2)确定状态和状态变量:将问题发展到
23、各个阶段时所处于的各种客观情况用不同样的状态表示出来。当然,状态的选纲要满足无后效性。(3)确定决策并写出状态转移方程:由于决讲和状态转移有着天然的联系,状态转移就是依照上一阶段的状态和决策来导出本阶段的状态。所以若是确定了决策,状态转移方程也即可写出。但事实上经常是反过来做,依照相邻两段各状态之间的关系来确定决策。搜寻界线条件:给出的状态转移方程是一个递推式,需要一个递推的停止条件或界线条件。程序设计实现:动向规划的主要难点在于理论上的设计,一旦设计完成,实现部分就会特别简单。依照上述动向规划设计的步骤,可获取大体解题框架如图2所示。图2动向规划设计的一般模式上述供应了动向规划方法的一般模式
24、,关于简单的动向规划问题,能够循序渐进地进行动向规划的设计。下面,给出一个利用动向规划方法求解的典型例子。【例题6】数字三角形问题。图3示出了一个数字三角形宝塔。数字三角形中的数字为不高出100的整数。现规定从最顶层走到最基层,每一步可沿左斜线向下或右斜线向下走。任务一:假设三角形行数10,键盘输入一个确定的整数值M,编程确定可否存在一条路径,使得沿着该路径所经过的数字的总和恰为M,若存在则给出所有路径,若不存在,则输出“NOAnswer!”字样。任务二:假设三角形行数100,编程求解从最顶层走到最基层的一条路径,使得沿着该路径所经过的数字的总和最大,输出最大值。输人数据:由文件输入数据,任务
25、一中文件第一行是三角形的行数N和整数值M。今后的N行分别是从最顶层到最基层的每一层中的数字。任务二中文件数据格式同任务一,可是第一行中没有整数值M。在例子中任务二的文件数据表示以下:输入:57输出:387输出路径和最大值81038或“NoAnswer!”字样。2774810452652744图3数字三角形45265【解析】关于这一问题,很简单想到用列举的方法去解决,即列举出所有路径并记录每一条路径所经过的数字总和。此后判断数字总和可否等于给定的整数值M或搜寻出最大的数字总和,这一想法很直观,而且关于任务一,由于数字三角形的行数不大(10),所以其列举量不是很大,应该能够实现。但关于任务二,若是
26、用列举的方法,当三角形的行数等于100时,其列举量之大是可想而知的,显然,枚举法关于任务二的求解其实不合用。其实,只要对对任务二略加解析,就可以得出一个结论:若是获取一条由顶至底的某处的一条最正确路径,那么关于该路径上的每一其中间点来说,由顶至该中点的路径所的数字和也最大。所以是一个典型的多段决策最化的。算法与解析以下:于任一,合理地确枚的方法,能够化的解法。由于从塔终究每次都只有两种走法,即左或右。“0”示左,表“1表”示右,于数N的数字塔,从终究的一种走法可用一个N-1位的二制数表示。如例中二制数字串1011,其的路径是:8146。就可以用一个Nl位的二制数来模走法和确定解的范。出从0到2
27、n-1个十制数所的串的路径中的数字和,判断其可否等于M而求得的解。N-1位二制于任二,采用划中的推解法。按三角形的行划分段,若行数一个n-1个段的决策。从始点出,依向求出第一段、第二段第n,可把看做n1段中各决策点至始点的最正确路径,最求出始点到点的最正确路径。:fk(Uk)从第k段中的点Uk至三角形点有一条最正确路径,路径所的数字的和最大,fk(Uk)表示个数字和;由于每一次决策有两个,或沿左斜向下,或沿右斜向下,所以:Uk1k-1段中某点Uk沿左斜向下的点;Uk2k-1段中某点Uk沿右斜向下的点;dk(Uk1)k段中Uk1的数字;dk(Uk2)k段中Uk2的数字。所以可写出推关系式(状移方
28、程):fk(Uk)=maxfk-1(Uk)+dk(Uk1),fk-1(Uk)+dk(Uk2)(k=1,2,3,n)f0(U0)0一次推,即可分求出由至底N个数的N条路径,在N条路径所的N个数字和中,最大即正确答案。动向规划方法实现的灵便性与技巧性上述例子出了一般情况下的划思程。一些的能够“循序渐进”来操作,但大多数的“划”,特是作信息学中的“划”,观察的知是多方面的,用的技巧是灵便多的。下面出上述例5形的例子。【例7】花店橱窗部署(99IOI)。假以最美的方式部署花店的橱窗,有F束花,每束花的品种都不一,同,最少有同数量的花瓶,被挨次成一行,花瓶的地址是固定的,并从左到右,从1到V序号,V是花
29、瓶的数量,号1的花瓶在最左,号V的花瓶在最右,花束能够移,而且每束花用1到F的整数独一,花束的整数决定了花束在花瓶中列的序即若是Ipathi。在明确两题的不同样此后,就可以对动向规划方程进行更正了。假设用的第j个数字,用qi,j表示从表格最基层到bi,j这个数字的最正确路径bi,j表示美学值表格中第(路径经过的数字总和最大i行)的数字和,更正后的动向规划转移方程为:qi,V+1=-(1iqF,j=bF,j(1F+1)jV)qi,j=maxqi+1,k(jKV+1)+AI,J(1,1IFJV)这样,得出的maxq1,k(1j就V)是最大的美学值,算法的时间复杂度为O(FV2)。对算法时间效率的改
30、进。先来看一下这样两个状态的求解方法:qi,j=maxqi+1,k(jkV+1)+bi,j(1iF,1jV)qi,j+1)=maxqi+1,k(j+1bf,jthentf,j:=tf,j+1elsetf,j:=bf,j;设定动向规划的初始条件,其中-9999表示负无量fori:=f-1downto1doforj:=vdownto1dobeginti,j:=ti,j+1;ifti+1,j+1+bi,jti,jthenti,j:=ti+1,j+1+bi,j;end;end;procedureprint;将最正确美学收效和对应方案输出到文件varf1:text;i,j,p:integer;为当前需确
31、定地址的花束编号,p为第i束花应插入的花瓶编号的最小值beginassign(f1,st2);rewrite(f1);writeln(f1,t1,1);p:=1;fori:=1tofdobegin用循环依次确定各束花应插入的花瓶j:=p;whileti,j=ti,pdoinc(j);write(f1,j-1,);p:=j;end;writeln(f1);close(f1);end;beginreadp;main;print;end.由此可看出,关于看似复杂的问题,经过转变即可变成简单的经典的动向规划问题。在问题原型的基础上,经过解析新问题与原问题的不同样之处,更正状态转移方程,改变问题状态的描
32、述和表示方式,就会降低问题规划和实现的难度,提高算法的效率。因此可知,动向规划问题中详细的规划方法将直接决定解决问题的难易程度和算法的时间与空间效率,而注意在详细的规划过程中的灵便性和技巧性将是动向规划方法提出的更高要求。动向规划的深入思虑时间效率动向规划是一种重要的程序设计思想,拥有广泛的应用价值。使用动向规划思想来设计算法,关于很多问题的解决经常拥有高时效,从理论上讲,关于规模为N的问题,搜寻算法的时间复杂度为O(N!),“动向规划”算法的时间复杂度是O(N2)。这两个时间根本就不是一个数量级的,所以,关于能够使用动向规划思想来解决的问题,使用动向规划是比较理智的选择。动向规划之所以拥有高
33、时效,是由于它在将问题规模不断减小的同时,有效地把解记录下来,从而防备了屡次解同一个子问题的现象,所以只要运用合适,较之搜寻而言,效率就会有很大的提高。现在,回头看看例题2的求解最短路径问题的解法,这个问题自然能够用搜寻方法来做,程序也很简单编写出来,这里,先给出搜寻方法解决这一问题的算法以下:设:disX为城市X到E的最短路线的长度;(X表示任意一个城市)mapI,J表示I,J两个城市间的距离,若mapI,J=0,则两个城市不连通。Varse:未接见的城市会集;Functiondistance(who:当前接见城市):integer;求当前接见城市与城市E的最短距离。beginlfwho=E
34、thensearch:=0Elsebeginmin:=maxint;ForI取遍所有城市dolf(mapwho,I0)and(iinse)thenbeginse:=sei;j:=mapwho,I+Long(I);se:=se+I;IFJMinthenmin:=J;end;distance:=min;end;end;beginse:=除A外所有城市的会集;disA:=distance(A);end从上述算法中能够看到,每次除了已经接见过的城市外,其他城市都要接见。比方,在求从B1到E的最短路径的时候,先求出从C2到E的最短路径;而在求从B2到E的最短路径的时候,又求了一遍从C2到E的最短路径。也
35、就是说,从C2到E的最短路径求了两遍。同样能够发现,在求从C1、C2到E的最短路径的过程中,从D1到E的最短路径也被求了两遍。而在整个程序中,从D1到E的最短路径被求了四遍,整个过程中做了大量的重复工作。所以,整个算法的时间复杂度为O(N!),显然是一个“指数级”的算法。经过前面的学习,已知最短路问题是一个满足最优话化原理和无后效性的问题,所以,能够用动向规划方法求解,以下是动向规划方法的算法描述:(有关变量定义同搜寻算法)disE=0初始化ForX=阶段3的每个城市downto阶段0的每个城市DobegindisX:=maxint;ForY=阶段X的下一个阶段中的每个城市doIfdisY+m
36、apX,YdisXThendisX:=disY+mapX,Y;end;从上述算法中能够看出,在求解的过程中,同时将求得的最短路径的距离储藏下来,随时2调用,同时,算法只要要一个两重循环就可以完成,所以算法的时间复杂为O(N),比搜寻算法的时间复杂度要小得多。正是由于动向规划方法在时间效率上的优势,在竞赛中,经常出现用动向规划求解的问题。近来几年来,动向规划问题的隐蔽性越来越大,所以在思虑问题的解决方法时,若是问题关于算法的时间要求较高时,就必定要考虑清楚,切不能凭第一感觉便下手,而要多进行解析,找出最正确的方法,这时动向规划方法不失为一种较好的选择。动向规划与其他算法的比较动向规划与其说是一种
37、算法,不如说是一种算法设计的策略,他的基本思想表现于好多其他算法之中。下面我们经过比较动向规划和其他的一些算法之间的互相联系,来深入理解动向规划的基本思想。动向规划与静态规划的关系动向规划与静态规划(线性和非线性规划等)研究的对象实质上都是在若干拘束条件下的函数极值问题。两种规划在好多情况下原则上能够互相变换。动向规划能够看作求决策u,u,.,un,使指标函数V(x,u,u2,.,u)达到最优(最大或最小)的121nl1n极值问题,状态转移方程、端点条件以及赞同状态集、赞同决策集等是拘束条件,原则上能够用非线性规划方法求解。一些静态规划只要合适引入阶段变量、状态、决策等就可以用动向规划方法求解
38、。下面用例子说明:例8用动向规划解以下非线性规划:其中gk(uk)为任意的已知函数。解:按变量uk的序号k划分阶段,看作n段决策过程;设状态为12n12,.,unx,x,.x,取问题中的变量u,u为决策;状态转移方程为:取gk(uk)为阶段指标,最优值函数的基本方程为(注意到xn+1=0):解此动向规划即可获取原静态规划的解。与静态规划对照,动向规划的优越性在于:能够获取全局最优解。由于拘束条件确定的拘束会集经常很复杂,即便指标函数较简单,用非线性规划方法也很难求出全局最优解。而动向规划方法把全过程化为一系列构造相似的子问题,每个子间题的变量个数大大减少,拘束会集也简单得多,易于获取全局最优解
39、。特别是关于拘束会集、状态转移和指标函数不能够用解析形式给出的优化问题,能够对每个子过程用列举法求解,而拘束条件越多,决策的搜寻范围越小,求解也越简单。关于这类问题,动向规划平时是求全局最优解的独一方法。能够获取一族最优解。与非线性规划只能获取全过程的一个最优解不同样,动向规划获取的是全过程及所有后部子过程的各个状态的一族最优解。有些实责问题需要这样的解族,即便不需要,它们在解析最优策略和最优值关于状态的牢固性时也是很适用的。当最优策略由于某些原因不能够实现时,这样的解族能够用来搜寻次优策略。能够利用经验提高求解效率。若是实责问题自己就是动向的,由于动向规划方法反响了过程逐段演变的前后联系和动
40、向特色,在计算中能够利用实质知识和经验提高求解效率。比方在策略迭代法中,实质经验能够帮助选择较好的初始策略,提高收敛速度。动向规划的主要缺点是:没有一致的标准模型,也没有构造模型的通用方法,甚至还没有判断一个问题可否构造动向规划模型的详细准则(大多数情况只能够凭经验判断可否合用动向规划)。这样就只能对每类问题进行详细解析,构造详细的模型。关于较复杂的问题在选择状态、决策、确定状态转移规律等方面需要丰富的想象力和灵便的技巧性,这就带来了应用上的限制性。2.用数值方法求解时存在维数灾(curseofdimensionality)。若一维状态变量有m个取值,那么关于n维问题,状态xk就有mn个值,关
41、于每个状态值都要计算、储藏函数fk(xk),关于n稍大(即便n=3)的实责问题的计算经常是不现实的。当前还没有战胜维数灾的有效的一般方法。动向规划与递推动向规划是最优化算法动向规划的实质是分治和解决冗余,所以动向规划也是递归思想的应用之一。但是,动向规划和递归法还是有区其他。一般我们在实质应用中碰到的问题主要分为四类:判断性问题、构造性问题、计数问题和最优化问题。动向规划是解决最优化问题的有效路子,而递推法在办理判断性问题和计数问题方面是一把利器。下面分别就两个例子,谈一下递推法和动向规划在这两个方面的联系。比方模四最优路径问题(拜会例题2)在以下列图中找出从第1点到第4点的一条路径,要求路径
42、长度mod4的余数最小。这个图是一个多段图,而且是一个特其他多段图。诚然这个图的形式比一般的多段图要简单,但是这个最优路径问题却不能够用动向规划来做。由于一条从第1点到第4点的最优路径,在它走到第2点、第3点时,路径长度mod4的余数不用然是最小,也就是说最优策略的子策略不用然最优这个问题不满足最优化原理。但是我们能够把它变换成判断性问题,用递推法来解决。判断从第1点到第k点的长度mod4为sk的路径可否存在,用fk(sk)来表示,则递推公式以下:界线条件为这里lenk,i表示从第k-1点到第k点之间的第i条边的长度,方括号表示“或(or)”运算。最后的结果就是能够使f4(s4)值为真的最小的
43、s4值。这个递推法的递推公式和动向规划的规划方程特别相似,我们在这里借用了动向规划的符号也就是为了更清楚地显示这一点。其实它们的思想也是特别相似的,能够说是递推法借用了动向规划的思想解决了动向规划不能够解决的问题。有的多阶段决策问题(像这一题的阶段特色就很显然),由于不能够满足最优化原理等使用动向规划的先决条件,而没法应用动向规划。在这时能够将最优指标函数的值看作“状态”放到下标中去,从而变最优化问题为判断性问题,再借用动向规划的思想,用递推法来解决问题。例10钉子与小球(NOI99)有一个三角形木板,竖直立放,上面钉着n(n+1)/2颗钉子,还有(n+1)个格子(当n=5时以以下列图每颗钉子
44、和周围的钉子的距离都等于d,每个格子的宽度也都等于d,且除了最左端和最右端的格子外每个格子都正对着最下面一排钉子的缝隙。a)。让一个直径略小于落向左边或右边(概率各d的小球中心正对着最上面的钉子在板上自由滚落,小球每碰到一个钉子都可能1/2),且球的中心还会正对着下一颗将要碰上的钉子。比方图b就是小球一条可能的路径。我们知道小球落在第i个格子中的概率为:其中i为格子的编号,从左至右依次为0,1,.,n。现在的问题是计算拔掉某些钉子后,小球落在编号为m的格子中的概率pm。假设最下面一排钉子不会被拔掉。比方图3是某些钉子被拔掉后小球一条可能的路径。图a图b图c输入:第1行为整数n(2=n=50)和
45、m(0=mA3-B3-C2-T3最短路径的长度为26。(2)算法解析当图中结点比很多,同时深度较深时,采用遍历算法时间上是不能取的。所以动向规划的方法合适此题。有向图的数据构造可用数组d表示:实数种类三维数组d(N,M,3)d(I,J,1)表示点(I,J)-(I-1,J+l)距离d(I,J,2)表示点(I,J)-(I,J+l)距离d(I,J,3)表示点(I,J)-(I+1,J+l)距离即d数组的第一维表示行,d数组的第二维表示列,d数组的第三维表示点到另三个方向(右上、右边、右下)上的点的距离。此时d(1,1,1)=max,d(1,1,2)=3,d(1,1,3)=maxmax表示无通路d(2,
46、1,1)=7,d(2,1,2)=6,d(2,1,3)=maxd(5,1,1)=4,d(5,1,2)=max,d(5,1,3)=maxd(1,2,1)=max,d(1,2,2)=6,d(1,2,3)=7d(2,2,1)=max,d(2,2,2)=8,d(2,2,3)=12max表示无通路算法的过程:从倒数第二列开始(C1,C2,C3,C4),当路径到达C1时,以下的最短为min(14,15)=10;同时记录下走的方向,为此,我们定义数组e:三维实型数组e(N,M,2)其中e(I,J,1)表示今后点到达下一个点的最短路径;e(I,J,2)表示今后点到达下一个点的最短路径的方向:1表示(I-1,J+
47、1),2表示(I,J+1),3表示(I+1,J+1)由此可知,最后一层的算法为:FORI=1toN从d(I,4,1),d(I,4,2),d(I,4,3)中找出最小值;e(I,4,1)=最小值,e(I,4,2)=方向NEXTI在算倒数第三列(B1,B2,B3,B4,B5):如B3点算mIn(B3,C2)点距离+C2点最小,(B2,C3)距离+C3点最小由此能够获取一个一的算法:FORI=M-1TO1STEP-1FORJ=1TON求出d(I,J,1)+e(I-1,J+1,1)d(I,J,2)+e(I,J+1,1)d(I,J,3)+e(I+1,J+1,1)NEXTJNEXTI其中的最小填入e(I,J
48、,1),e(I,J,2)方向0,1或2。在e(I,J)求出此后,再在e(1,1,2),e(2,1,1),e(I,1,1)中找出最小,e(I,1,1),即第一列上的点的最短路径,此后求出达到最短路径的通路:当d(I,1,2)=1:I-1,2当d(I,1,2)=2:I,2当d(I,1,2)=3:I+1,2以此方法,求出通路。PROGRAMMIN_TRAIL(INPUT,OUTPUT);CONSTmaxn=20;maxm=20;fname=q11.txt;TYPETMAP=ARRAY0.MAXN,0.MAXM,1.3OFREAL;TYPETMAKE=ARRAY0.MAXN,0.MAXM,1.2OFR
49、EAL;VARn,m:BYTE;D:TMAP;E:TMAKE;PROCEDUREINIT;VARi,j,k:BYTE;F:TEXT;BEGINFILLCHAR(D,SIZEOF(D),0);ASSIGN(F,FNAME);RESET(F);READLN(F,N,M);FORi:=1TOnDOFORj:=1TOmDOFORk:=1TO3DOBEGINREAD(F,di,j,k);IFdi,j,k=0THENdi,j,k:=1E+08;END;CLOSE(F);END;FUNCTIONgetn(mm:BYTE):BYTE;BEGINgetn:=n-ORD(NOTODD(MM);END;PROCED
50、UREmake;VARi,j,k,p:INTEGER;o,no:REAL;BEGINFORj:=m-1DOWNTO1DOFORi:=1TOgetn(j)DOBEGINo:=1E10;p:=0;FORk:=-1TO1DOBEGINno:=ei+k,j+1,1+di,j,k+2;IFnooTHENBEGINp:=k;o:=no;END;END;ei,j,1:=o;ei,j,2:=p;END;END;PROCEDUREOUTput;VARi,j,p:INTEGER;BEGINp:=1;FORi:=2TOnDOIFei,1,1);IFiA4-B4-C3-T42求最长不下降序列(1)描述有由n个不同样的
51、整数成的数列,:a(1)、a(2)、a(n)且a(i)a(j)(ij)比方3,18,7,14,10,12,23,41,16,24。若存在i1i2i3ie且有a(i1)a(i2)a(ie)称度e的不下降序列。如上例中3,18,23,24就是一个度4的不下降序列,同也有3,7,10,12,16,24度6的不下降序列。程序要求,当原数列出此后,求出最的不下降序列。(2)算法解析依照划的原理,由后往前行搜寻。1a(n)来,由于它是最后一个数,所以当从a(n)开始找,只存在度1的不下降序列;2若从a(n-1)开始找,存在下面的两种可能性:若a(n-1)a(n)存在度1的不下降序列a(n-1)或a(n)。
52、3一般若从a(i)开始,此最不下降序列按以下方法求出:在a(i+1),a(i+2),a(n)中,找出一个比a(i)大的且最的不下降序列,作它的后。4为算法上的需要,定义一个数组整数种类二维数组d(N,3)d(I,1)表示点a(i)d(I,2)表示从I地址到达N的最长不下降序列长度d(I,3)表示从I地址开始最长不下降序列的下一个地址初始化:FORI=1TONINPUT#1,D(I,1)D(I,2)=1D(I,3)=0NEXTI下面给出求最长不下降序列的算法:FORI=N-1TO1STEP-1L=0:P=0FORJ=I+1TONIFD(I,1)LTHENL=D(J,2)P=JENDIFNEXTJ
53、IFL0THEND(I,2)=L+1D(I,3)=PENDIFNEXTI下面找出最长不下降序列:DMAX=D(1,2)L=1FORI=2TON-1IFD(I,2)DMAXTHENDMAX=D(I,2)L=IENDIFNEXTI最长不下降序列长度为D(DMAX,2)序列WHILEL0PRINTD(L,1);L=D(L,3)WEND(3)程序清单PROGRAMMAX_RISE(INPUT,OUTPUT);CONSTMAXN=100;FNAME=Q21.TXT;TYPETLIST=ARRAY1.MAXN,1.3OFINTEGER;VARD:TLIST;N:BYTE;PROCEDUREINIT;VAR
54、I:INTEGER;F:TEXT;BEGINASSIGN(F,FNAME);RESET(F);READLN(F,N);FORI:=1TONDOBEGINREAD(F,DI,1);DI,2:=1;DI,3:=0END;CLOSE(F);END;PROCEDUREMAKE;VARI,J,P:BYTE;L:INTEGER;BEGINFORI:=N-1DOWNTO1DOBEGINL:=0;P:=0;FORJ:=I+1TONDOIF(DI,1L)THENBEGINL:=DJ,2;P:=J;END;IFL0THENBEGINDI,2:=L+1;DI,3:=P;END;END;END;PROCEDUREOU
55、TPUT;VARI,L,DMAX:BYTE;BEGINWRITE(SOURCE:);FORI:=1TONDOWRITE(DI,1:5);WRITELN;DMAX:=D1,2;L:=1;FORI:=2TON-1DOIFDI,2DMAXTHENBEGINDMAX:=DI,2;L:=I;END;WRITE(RESULTIS:);WHILEL0DOBEGINWRITE(DL,1:5);L:=DL,3;END;WRITELN;WRITELN(MAXLENGTH=,DDMAX,2);END;BEGININIT;MAKE;OUTPUT;END.INPUT:10OUTPUT:SOURCE:RESULTIS:3
56、710122341MAXLENGTH=63最小代价子母树(1)问题描述最优化原理应在子问题求解中表现。有些问题也赞同顺推。给定一个正整数序列a(1),a(2),.,a(n)不改变序列中每个元素在序列中的地址,把它们相加,井用括号记每次加法所得的和,称为中间和。编程完成任务:1添上n-l对括号,加法运算依括号次序进行,获取n-l其中间和;2求出使中间和最少的添括号方法。比方给出序列是4,1,2,3。第一种添括号方法:(4+1)+(2+3)=(5)+(5)=(10),有三其中间和是5,5,10,它们之和为:5+5+10=20,第二种添括号方法:(4+(1+2)+3)=(4+(3)+3)=(4+(6
57、)=(10),中间和是3,6,10,它们之和为19。(2)算法分折1把序列的n个数,看作二元树的叶子(二叉树)的权。若是用一种括号把两个正整数括起来,则它们对应结点的父辈的权就是由此次加法产生的中间和。这样就把对序列任何一种加括号的方法与一棵带权的二元树对应。上面例子中加括号方法对应二元树如图一棵带权二元树的代价就是树中所有根结点权之和。代价最小的带权二元树称为最优二元树。问题转变成求最优带权二元树。那么,什么是最优带权二元树呢?最优二叉树,又称哈夫曼树,是一类带权路径长度最短的树,有着广泛的应用。我们第一给出路径和路径长度的看法。从树中一个结点到另一个结点之间的分支组成这两个结点之间的路径,
58、路径上的分支数量称做路径长度。树的路径长度是从树根到每一结点的路径长度之和。这类路径长度最短的二叉树是。若将上述看法推行到一般情况,考虑带权的结点。结点的带权路径长度为从该结点树根之间的路径长度与结点上权的乘积。树的带权路径长度为树中所有叶子结点的带路径长度之和,平时记作WPL=W(k)L(k)k=1.n假设有n个权值W(1),W(2),.,W(n),试构造一棵有n个叶子结点的二叉树,每个叶子结点带权为W(k),则其中带权路径长度WPL最小的二叉树称做最优二又树或哈夫显树。比方,图中的两棵二叉树,都有4个叶子结点a、b、c、d,分别带权4,1,2,3,它们的带权路径长度分别为(a)WPL=42
59、十12十22十32=20(b)WPL=41十13十23十32=19如何构造哈夫曼树呢?俗称哈夫曼算法。现表达以下:(1)依照给定的n个权值T(2),.,T(n)W(1),W(2),.,W(n)组成n棵二叉树的会集F=T(1),其中每棵二叉树T(k)中只有一个带权为W(k)的根结点,其左右子树均空。(2)在F中采用两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左、右子树上根结点的权值之和。在F中删除这两棵树,同时将新获取的二叉树加入F中。重复(2)和(3),直到F只含一棵树为止。这棵树即是哈夫曼树。2若是一棵带权的二元树是最优的,那末它的任何一棵子树关于
60、这棵子树的树叶来说也是最优的。所以,带权最优二元树的问题吻合最优化原则。能够用动向归划方法求解。3关于这个问题在决策时要考虑到树叶序列的划分方案。状态解析1从序列4,4,8,5,4,3,5解析它的二元权的构造。图给出两棵二元树(a)、(b)。这棵7片叶叶的二元树,图(a)中的树的左子树是三片叶子,右子树是4片叶子,对应于树叶的一种划分方案。记为(左3,右4)。对应添号形式是:(4+4)+8)+(5+4)+(3+5)其代价和为91。图(b)对应于另一种划分方案记为(左4,右3),其代价和是94。可见,由于树叶的划分方案不同样,所得的二元树的代价也不同样。对七片叶子的二元树,能够有(左1,右6),
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026用户界面(UI)设计师校招面试题及答案
- 深静脉血栓后遗症个案护理
- 神经肌肉型脊柱侧弯脊髓灰质炎相关个案护理
- 2026校招:中国中车面试题及答案
- 3R-5S-4-Gingerdiol-生命科学试剂-MCE
- 2026年宁波职业技术学院单招职业倾向性考试题库及答案详解(典优)
- 2026校招:上海交易集团笔试题及答案
- 2026年天津海运职业学院单招职业倾向性测试题库含答案详解(满分必刷)
- 2026校招:上海钢联电子商务笔试题及答案
- 2026年宁夏葡萄酒与防沙治沙职业技术学院单招职业适应性考试题库含答案详解(研优卷)
- 北京中学转学管理办法
- 统编版(2024)七年级下册道德与法治全册分课时同步练习题(含答案)
- 食堂承包管理难点及解决措施
- 2025年重庆市中考英语试卷真题(含标准答案及解析)
- 旋挖钻孔灌注桩全护筒跟进施工工艺主要施工方法及技术措施
- 大桥连续刚构桥实施性施工组织设计
- 《当前保密工作面临的新形势、新任务》课件
- 国家职业技术技能标准 6-11-01-04 制冷工 人社厅发2018145号
- 承插型盘扣式钢管脚手架安全技术标准JGJT231-2021规范解读
- 2025年齐齐哈尔市高三语文3月一模考试卷附答案解析
- 环卫清扫保洁服务方案投标文件(技术方案)
评论
0/150
提交评论