noip教程-动态规划的优化.ppt
《noip教程-动态规划的优化.ppt》由会员分享,可在线阅读,更多相关《noip教程-动态规划的优化.ppt(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、动态规划的优化方法动态规划的优化方法YALI 朱全民朱全民动态规划优化的内涵uu动态规划算法的时间复杂度=阶段数*每个阶段状态转移的状态数 *每次状态转移的时间 或者:状态总数*每次状态转移的时间uu重点:减少每个阶段的状态数,也就是减少了状态总数优化方法1:改进状态的表示uu例例1:理想收入:理想收入问题uu理想收入是指在股票交易中,以1元为本金可能获得的最高收入,并且在理想收入中允许有非整数股票买卖。uu已知股票在第i天每股价格是Vi元,1iM,求M天后的理想收入。方法一uu设Fi表示在第i天收盘时能达到的最高收入,则有Fi的递推关系式:公式含义:在第i天收盘时能达到的最高的收入,是将第j
2、天收盘后的收入,全部用于买入第k天的股票,再在第i天将所持的股票全部卖出所得的收入。时间复杂度是O(M3)。方法二uu设Pi表示前i天能获得的最多股票数,则可列出状态转移方程:uu设Qi表示前i天能达到的最大收入,则可列出状态转移方程:时间复杂度是O(M2)。方法三uu分析:上述公式的含义是当分析:上述公式的含义是当0=ji 0=ji 时时,求求Qi-1Qi-1和和Qj*vi/vjQj*vi/vj的最大值的最大值 uu对于对于0=ji0=ji,要求,要求Qi,Qi,实际上实际上Q1Qi-1Q1Qi-1都都已经求出,因此我们只要搞一个变量保存已经求出,因此我们只要搞一个变量保存Qj/Vj Qj/
3、Vj 的最大值即可,记为的最大值即可,记为MaxQ.MaxQ.uu这样,公式可以写成这样,公式可以写成uu对每次求出的对每次求出的Qi,Qi,都更新都更新MaxQ,MaxQ,显然时间复杂度显然时间复杂度为为O(M)O(M)问题描述现有n首由RaucousRockers演唱组录制的歌曲,计划从中选择一些歌曲来发行m张唱片,每张唱片至多包含t分钟的音乐,唱片中的歌曲不能重叠。按下面的标准进行选择:(1)这组唱片中的歌曲必须按照它们创作的顺序排序;(2)包含歌曲的总数尽可能多。输入n,m,t,和n首歌曲的长度,它们按照创作顺序排序,没有一首歌超出一张唱片的长度,而且不可能将所有歌曲的放在唱片中。输出
4、所能包含的最多的歌曲数目。例2RaucousRockers演唱组设n首歌曲按照创作顺序排序后的长度为long1.n,则动态规划的状态表示描述为:gi,j,k,(0in,0jm,0kt),表示前i首歌曲,用j张唱片另加k分钟来录制,最多可以录制的歌曲数目。状态转移方程为:当klongi,i1时:gi,j,k=maxgi-1,j,k-longi+1,gi-1,j,k当klongi,i1时:gi,j,k=maxgi-1,j-1,t-longi+1,gi-1,j,k规划的边界条件为:当0jm,0kt时:g0,j,k=0;问题的最优解为:gn,m,0。算法的时间复杂度为:O(n*m*t)。改进的状态表示
5、描述为:gi,j=(a,b),0in,0ji,0am,0bt,表示在前i首歌曲中选取j首录制所需的最少唱片为:a张唱片另加b分钟。状态转移方程为:gi,j=mingi-1,j,gi-1,j-1+longi其中(a,b)+longi=(a,b)的计算方法为:当b+longit时:a=a;b=b+longi;当b+longit时:a=a+1;b=longi;规划的边界条件:当0in时,gi,0=(0,0)题目所求的最大值是:answer=maxk|gn,k(m-1,t)算法的时间复杂度为:O(n2)。优化方法优化方法2:利用决策的单调性利用决策的单调性uu例3:最长上升序列问题 f(i)=maxf
6、(j)+1 (1=ji f(i)=maxf(j)+1 (1=ji=n=n,bjbi),bjbi)uu上上式式含含义义为为:对对于于所所有有的的1=ji1=ji,bjbi,bjbi,必必须须找一个最大的找一个最大的f(j)f(j)uu反反过过来来说说,对对于于1=ji1=ji,必必须须找找到到一一个个最最大的大的f(j),f(j),满满足足bjbibjbi。分析uu对方程进行一下改进:对于对方程进行一下改进:对于对方程进行一下改进:对于对方程进行一下改进:对于 ji,ji,fi=maxf(j)+1,fi=maxf(j)+1,其中,其中,其中,其中,minj|r jaiminj|r jaiuurj
7、rjrjrj为为为为所有等于所有等于所有等于所有等于fjfjfjfj时时时时ajajajaj的最小的最小的最小的最小值值值值。uu因此,我因此,我因此,我因此,我们们们们可以搞一个可以搞一个可以搞一个可以搞一个队队队队列列列列维护维护维护维护f(j)f(j)f(j)f(j)的上升序列。的上升序列。的上升序列。的上升序列。uu对对对对于当前的于当前的于当前的于当前的i i i i,利用二分,利用二分,利用二分,利用二分查查查查找在找在找在找在队队队队列列列列查查查查找到找到找到找到满满满满足条足条足条足条件件件件bjbibjbibjbibjbi的的的的f(j)f(j)f(j)f(j)uu用用用用
8、bibibibi去替去替去替去替换换换换与与与与f(i)f(i)f(i)f(i)相等的相等的相等的相等的bjbjbjbj若若若若bj=bi,bj=bi,bj=bi,bjbibjbibjbibjbi,则则则则用用用用bibibibi替替替替换换换换bjbjbjbj若在若在若在若在对对对对尾,尾,尾,尾,则则则则直接插入直接插入直接插入直接插入uu显显显显然然然然该该该该算法的算法的算法的算法的时间时间时间时间复复复复杂杂杂杂度度度度为为为为O(n*log(n)O(n*log(n)O(n*log(n)O(n*log(n)例例4 4:最大子序和:最大子序和问题描述输入一个长度为的整数序列(A1,A2
9、,An),从中找出一段连续的长度不超过M的子序列,使得这个序列的和最大。最大子序和输入一个长度为的整数序列(输入一个长度为的整数序列(A1,A2,An),从中),从中找出一段长度不超过找出一段长度不超过m的连续的子序列,使得这个序列的和的连续的子序列,使得这个序列的和最大。最大。例如:序列例如:序列 1,-3,5,1,-2,3当当M=2或或3时时,S=5+1=6当M=4时,S=5+1-2+3=7数据范围:50%的数据N,M=1000100%的数据N,M=20000一个简化的问题序列的最大连续和输入一个长度为的整数序列(A1,A2,An),从中找出一段连续的子序列,使得这个序列的和最大。和原问题
10、相比没有M这个序列长度的限制!设F(i)表示以第i个数结尾的最大连续和以第i个数结尾的最大连续和序列,可能存在两种选择:情形一:只包含Ai情形二:包含Ai和以Ai-1结尾的最大连续和序列状态转移方程如下:F(i)=maxAi,F(i-1)+Ai边界:F(1)=A1,Ans=maxF(i)|1=i=n该算法的时间复杂度为O(n)分析算法一枚举设F(i)为以Ai结尾长度不超过M的最大子序和对于每个F(i),从1到m枚举k的值,完成Aj的累加和取最大值。该算法的时间复杂度为O(n2)简化方程用一个二叉堆来维护S(i-k),每次求F(i)之前的操作如下:算法二堆求F(i-1)时,求minS(i-m-1
11、),S(i-2)求F(i)时,求minS(i-m),S(i-1)在堆中删除元素S(i-m-1),插入元素S(i-1).复杂度O(2log2n)从堆中取出当前最小值.复杂度O(1)所以计算的总复杂度为O(nlog2n)队列优化在算法二中,考虑用队列来维护决策值S(i-k)。每次只需要在队首删掉S(i-m-1),在队尾添加S(i-1)。但是取最小值操作还是需要O(n)时间复杂度的扫描。考察在添加S(i-1)的时候,设现在队尾的元素是S(k),由于ki-1,所以S(k)必然比S(i-1)先出队。若此时S(i-1)=S(k),则S(k)这个决策永远不会在以后用到,可以将S(k)从队尾删除掉(此时队列的
12、尾部形成了一个类似栈的结构)队列优化队列优化 同理,若队列中两个元素同理,若队列中两个元素S(i)和和S(j),若若i=S(j),则我们可以删掉,则我们可以删掉S(i)(因为(因为S(i)永远不会被用到)。此时的队永远不会被用到)。此时的队列中的元素构成了一个单调递增的序列,列中的元素构成了一个单调递增的序列,即:即:S1S2S3Sk算法三算法三 我们来整理在求我们来整理在求F(i)的时候,用队列的时候,用队列维护维护S(i-k)所需要的操作:所需要的操作:若当前队首元素若当前队首元素S(x),有,有x=i-m为为止。止。若当前队尾元素若当前队尾元素S(k)=S(i-1),则,则S(k)出队;
13、直到出队;直到S(k)S(i-1)为止。为止。在队尾插入在队尾插入S(i-1)取出队列中的最小值,即队首元素。取出队列中的最小值,即队首元素。算法三算法三 由于对于求每个由于对于求每个F(i)的时候,进队和的时候,进队和出队的元素不止一个。出队的元素不止一个。但是我们可以通过分摊分析得知,每但是我们可以通过分摊分析得知,每一个元素一个元素S(i)只进队一次、出队一次,所只进队一次、出队一次,所以队列维护的时间复杂度是以队列维护的时间复杂度是O(n)。而每次。而每次求求F(i)的时候取最小值操作的复杂度是的时候取最小值操作的复杂度是O(1),所以这一步的总复杂度也是,所以这一步的总复杂度也是O(
14、n)。综上所述,该算法的总复杂度是综上所述,该算法的总复杂度是O(n)方法3:根据最优解的性质减少决策uu例例5 5:石子合并问题:石子合并问题规划的边界条件为:mi,i=0令si,j=k,表示合并的最优断开位置。算法的时间复杂度为O(n3)。猜想uu合并第i堆到第j堆石子的最优断开位置si,j要么等于i,要么等于j-1,也就是说最优合并方案只可能是:(i)(i+1 j)或 (i j-1)(j)证明:uu设合并第设合并第i i堆到第堆到第j j堆石子的最优断开位置堆石子的最优断开位置 si,j=p si,j=p,且,且ipj-1ipj-1。情况情况1 1:ti,ptp+1,j ti,ptp+1
15、,j uu 由于由于ipip,所以可以设,所以可以设q=si,pq=si,p。于是最优合并方案为:。于是最优合并方案为:(iq)(q+1.p)(p+1j)(iq)(q+1.p)(p+1j),它的得分,它的得分,F1=mi,q+mq+1,p+mp+1,j+ti,j+F1=mi,q+mq+1,p+mp+1,j+ti,j+ti,pti,puu我们可以构造如下的合并方案:我们可以构造如下的合并方案:(iq)(q+1.p)(p+1j)(iq)(q+1.p)(p+1j),它的得分,它的得分,F2=mi,q+mq+1,p+mp+1,j+ti,j+F2=mi,q+mq+1,p+mp+1,j+ti,j+tq+1
16、,jtq+1,juu由于由于qpqp,所以,所以ti,ptp+1,jtq+1,jti,ptp+1,jtq+1,j,所以,所以F1F2F1tp+1,j ti,ptp+1,j 与情况与情况1 1是对称的。是对称的。方法4:利用贪心思想减少状态总数uu例例例例6 6 6 6:快餐问题:快餐问题:快餐问题:快餐问题uuPeterPeter最近在最近在最近在最近在RR市开了一家快餐店,为了招揽顾客,该快餐店市开了一家快餐店,为了招揽顾客,该快餐店市开了一家快餐店,为了招揽顾客,该快餐店市开了一家快餐店,为了招揽顾客,该快餐店准备推出一种套餐,该套餐由准备推出一种套餐,该套餐由准备推出一种套餐,该套餐由准
17、备推出一种套餐,该套餐由AA个汉堡,个汉堡,个汉堡,个汉堡,BB个薯条和个薯条和个薯条和个薯条和C C个饮料个饮料个饮料个饮料组成。价格便宜。为了提高产量,组成。价格便宜。为了提高产量,组成。价格便宜。为了提高产量,组成。价格便宜。为了提高产量,PeterPeter从著名的麦当劳公司从著名的麦当劳公司从著名的麦当劳公司从著名的麦当劳公司引进了引进了引进了引进了NN条生产线。所有的生产线都可以生产汉堡,薯条和饮条生产线。所有的生产线都可以生产汉堡,薯条和饮条生产线。所有的生产线都可以生产汉堡,薯条和饮条生产线。所有的生产线都可以生产汉堡,薯条和饮料,由于每条生产线每天所能提供的生产时间是有限的、
18、不同料,由于每条生产线每天所能提供的生产时间是有限的、不同料,由于每条生产线每天所能提供的生产时间是有限的、不同料,由于每条生产线每天所能提供的生产时间是有限的、不同的,而汉堡,薯条和饮料的单位生产时间又不同。这使得的,而汉堡,薯条和饮料的单位生产时间又不同。这使得的,而汉堡,薯条和饮料的单位生产时间又不同。这使得的,而汉堡,薯条和饮料的单位生产时间又不同。这使得PeterPeter很为难,不知道如何安排生产才能使一天中生产的套餐很为难,不知道如何安排生产才能使一天中生产的套餐很为难,不知道如何安排生产才能使一天中生产的套餐很为难,不知道如何安排生产才能使一天中生产的套餐产量最大。请你编一程序
19、,计算一天中套餐的最大生产量。为产量最大。请你编一程序,计算一天中套餐的最大生产量。为产量最大。请你编一程序,计算一天中套餐的最大生产量。为产量最大。请你编一程序,计算一天中套餐的最大生产量。为简单起见,假设汉堡、薯条和饮料的日产量不超过简单起见,假设汉堡、薯条和饮料的日产量不超过简单起见,假设汉堡、薯条和饮料的日产量不超过简单起见,假设汉堡、薯条和饮料的日产量不超过100100个。个。个。个。uu输入输入输入输入:第一行为三个不超过第一行为三个不超过第一行为三个不超过第一行为三个不超过100100的正整数的正整数的正整数的正整数AA、BB、C C中间以一个中间以一个中间以一个中间以一个空格分
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- noip 教程 动态 规划 优化
限制150内