动态规划刘汝佳_第1页
动态规划刘汝佳_第2页
动态规划刘汝佳_第3页
动态规划刘汝佳_第4页
动态规划刘汝佳_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《算法艺术与信息学竞赛》

标准课件动态规划(一):经典问题刘汝佳目录一、最长公共子序列O(mn)二、最优排序二叉树O(n3)三、最长上升子序列O(nlogn)四、最优三角剖分O(n3)五、最大m子段和O(mn)六、0-1背包问题O(min{nc,2n,n1.44n})一、最长公共子序列LongestCommonSubsequence(LCS)分析考虑前缀x[1..i]和y[1..j],定义c[i,j]=|LCS(x[1..i],y[1..j])|则c[m,n]=|LCS(x,y)|.递推公式为很直观.考虑x[i]=y[j]的情形:关键点一:最优子结构为了使用动态规划,问题需具备最优子结构(OptimalSubstructure)直接书写的程序递归树分析关键点二:重叠子问题为了让动态规划确实发挥功效,问题应该包含尽量多的重叠子问题(overlappingsubproblems)解决方法:记忆化注意memoization不是memorization自底向上递推空间优化如果只需要最优值,可以用滚动数组实现按照i递增的顺序计算,d[i,j]只和d[i-1,j]和d[i,j-1]以及d[i-1,j-1]有关系,因此只需要保留相邻两行,空间复杂度为O(min{m,n})更进一步的,可以只保留一行,每次用单独的变量x保留d[i-1,j],则递推方程为If(i==j)d[j]=x;else{x=d[j];d[j]=max{d[j-1],d[j]}};变形.回文词给一个字符串a,保持原字符的顺序不变,至少要加几个字符才能变成回文词?例:abfcbfaafbcfcbfa分析红、绿色表示原字符,白色为新增字符显然,s和s’在任何一个位置不可能都是白色(不需要加那个字符!)应该让红色字符尽量多!相当于求s和逆序串s’的LCS,让LCS中的对应字符(红色)对齐,中间的每个绿色字符都增加一个字符和它相等二、最优排序二叉树给n个关键码和它们的频率,构造让期望比较次数最小的排序二叉树分析定理:最优排序二叉树的子树也是最优排序二叉树给出关键码-频率对照表(升序排列)问题:把哪个关键码做为根?则左右子树可以递归往下做ABCDE231081230FGHIJKLMNOP..514182024117222210..分析用递随归来板思考昼,但善用递倦推来轰做先考止虑两弟个结壳点的启情形分析可以是用矩片阵来绍保存炕结果C[蹄j,扣k]表示永从j到k的关子键码绒组成棕的最尝优排责序二冶叉树Ro贱ot月[j语,k]记录吸这棵辆排序辜二叉旅树的农根分析考虑熄三个畅结点兰的情隐形最优蝴值放鲜在C[槐B,收D]中,畜根放友在ro陕ot猴[B舌,D]中分析类似恭地,云更新催所有C[蚕j-唯2,鲜j]和ro倾ot秧[j肚-2促,j肃]分析四个伙结点岸的情趟形(爪如A-怖D)分析最终矩计算刊结果请为分析可以冈利用ro烈ot矩阵话递归异地构悲造出纺最优屋树分析时间逮复杂东度:导计算赠每个C[误i,谅j]和ro迈ot尾[i猛,j]需要仅枚举蛋根结决点,测故为O(染n3)空间案复杂脑度:枯需要内两个n*需n矩阵轻,O(橡n2)三、贷最长昆上升后子序煌列最长热上升庙子序逼列问丹题(LI复S)给一懒个序缠列,沿求它训的一报个递惊增子找序列郑,使熟它的许元素加个数彩尽量疑多。敌例如龟序列1,6虚,2,5,4垒,7的最嘱长上章升子奖序列庙是1,矿2,过5,尾7(还艳有其招他的班,这熊里略夺去)分析定义d[护i]是从乔第1个元慕素到澡第i个元地素为骂止的睁最长暗子序科列长敞度,则状家态转那移方赞程为直接场使用惕这个骨方程岸得到壮的是O(贯n2)算法下面头把它址优化唯到O(愈nl强og石n)状态以的组界织d值相量同的a值只需怕要保优留最诸小的,因此表用数碗组g[初i]表示d值为i的数付的a最小你值,显然g[瞧1]士<=激g[栋2]纳<=催…<鹿=g[柄k]计算d[照i]:需要慨在g中找晒到大纽奉于等脏于a[啊i]的第危一个刘数j,则d[数i]=孩j更新g:由于g[类j]>a[换i],需要采更新g[芳j]=a[倍i]代码使用ST椅L的lo挣we紫r_籍bo漏un蚀d可以移直接演求出五比a[龙i]大的阴第一衔个数,用二貌分查泛找实床现,每次例转移许时间O(活lo扔gn),总时惯间O(税nl倚og谣n)fi供ll誉(g,脏g浩+抹n,鱼i针nf您in荐it波y)妥;fo番r(队in映ti叙=柄0;墓i霞<登n毁;致i+挡+)雹{in起tj情=lo半we侄r_妥bo榨un覆d(葬g,盖g止+贼n,a[吼i])泄-扁g裕;d[讽i]述=眨j侵+框1;g[司j]餐=a[熟i];凯}变形1:航线脂问题有两节行点,每行n个.第一图行点祥和第弓二行飘点是长一一欣对应断的,有线冻连接,如下尚图所痛示选择魄尽量闷多的嚷线,两两如不交匀叉分析设与帆第1行第i个点致对应肚的是翅第2行第f[巴i]个点假设i<跪j,两条交线(i虹,f[府i])和(j营,f[茶j])的充衬要条冻件是f[第i]<f[舞j],因此秃问题虹变成致了求f的最浙长上睡升子臭序列时间该复杂干度为O(宪nl许og糊n)变形2:两排蛇列的LC男S给1~耍n的两束个排简列p1,猫p2求p1和p2的最舟长公前共子挨序列例:15烛3245抖3沈42延1分析算法缓一:直接煌套用LC意S算法,时间O(宽n2)算法槽二:注意萄到把协两个继排列盲做相同份的置庆换,跃LC龄S不变,可以刃先把p1排列练为1,吴2,怜3…旨,n1532412345即映惧射52箭,阴2絮4,内4宗5赵,街p2作同密样置局换53421侮23541与1,赖2,渔3.摔.n的LC略S显然久是最莲长上源升子蜡序列,时间扑降为O(争nl盯og箩n)推广:胸DA笔G上的奥最短裳路“上升”依赖抗于序抗关系<=缸,它具向有一梢般性DA摘G(有向售无环剑图)的最础长路迈径问剂题:把有貌向边肝看成男偏序盒关系,则本拘题的示算法苹一仍抬然适轮用,时间溉复杂裹度为O(禾n2).如果耻图的证边数m比较,可进连一步梢优化扯到O(迷m),因为票每条卖边恰声好考都虑一冬次(用邻揭接表能或前卫向星,而不转是邻束接矩俘阵)算法拌二不丑再适背用!因为d值相发同的a不一纸定可地以两痒两相点互比瞒较,不一谱定存姥在最概小值.四、抄最优披三角提剖分给一屠个n个顶朴点的扬凸多心边形,有很碧多方蹲法对怎它进缩慧行三怎角剖意分(p仔ol俯yg成on还t效ri寒an战gu娱la捡ti头on融)每个梯三角紫形有相一个沿权计蜘算公府式(如周柄长,顶点冻权和),求总垮权最得小(大)的三扭角剖飘分方床案分析用d[千i,著j]表示凑由顶校点i,破i树+1吴,钟…,炎j组成咸的多点边形(注意i可以用大于j)的最抓小代晚价方案弟一:枚举扭三个合顶点,组成摔一个厕三角卵形,决策跑是O(牙n3)的方案笑二:边(i,扮j)一定键属于燥一个纠唯一腾的三兽角形,设第蛾三个株顶点洁为k,则决吧策仅咽为O(既n)采用闲方案冶二,状态O(鸭n2),决策O(渔n),总O(厦n3)分析确定k后,最优聪方案萝应该牌是d[沫i,抛k]搞+d双[k绒,j火]+龄w(繁i,举k,苗j)因此赵转移膊方程d[藏i,苗j]=ma割x{煎d[糖i,古k]皇+d阻[k症,j暂]+西w(惜i,探k,妖j)}变形1:最优膜矩阵共乘法系链需要绩计算n个矩暮阵的贱乘积A1A2…An由于被矩阵肌乘法互满足江结合然律,可以捕有多钥种计断算方创法.例如A1是10陵*1臣00腾,抵A2是10料0*汽5,烤A3是5*虎50胀,则顺序1:波(林A1A2)A3,代价约为10死*1邪00袍*5赠+1序0*仇5*燥50睡=7良50药0顺序2:胖A1(A2A3),代价马为10捷0*爆5*质10悦+1迫0*谣10奖0*脊50流=7少50慨00求代俘价最泥小的惊方案(加括筋号方线法)共同事的结着构用二叉虽树(b纹in匹ar桐y失tr婚ee领)可以先表示旁两个名问题头相同城的结手构,每个悬结点腊表示帐一个最区间(结点耐区间/矩阵伯区间),左子已树和镇右子蚕树表穿示分脸成的笨两个首序列如果没在原妹问题冶中让d[委i,振j]表示i-长1~特j的最巷优值薄,则多在方错程形雀式上甲也完鞋全等欲价变形2.决斗编号钞为1~n的n个人唯按逆税时针丽方向览排成到一圈,他净们要勾决斗n-1场。公每场士比赛岗在某地相邻吨两人储间进站行,独败者眠退出稠圈子膝,紧能靠败积者右技边的进人成括为与悔胜者嗽直接准相邻风的人朋。任意加两人摆之间纱决斗采的胜护负都阶将在蹄一矩勺阵中锤给出辞(如和果A[i,j]=棵1则i与j决斗i总是短赢,绝如果A[i,j]=兼0则i与j决斗乌时i总是窜输)袋,求出梢所有可能赢得感整场蛋决斗扰的人结的序夜号分析首先纳把圈饼想象艰成一厚条链设d[幕i,宪j]表示i是否碰能和j相遇,则相灶遇的挣充要盏条件扫是存丈在k,制i和k,屡k和j都能慌相遇,且i或j能打曾败k同样踩是O(骡n2)个状滴态,决策O(继n),总O(胸n3)五、株最大m子段汇和给一扔个序均列a1,跨a2,销…,雁an求m个不相闪交(可以腊相接)的连粮续序构列,总和污尽量久大例如m=醒2,1徒2换-3续4淹5-67分析设d[竹i,青j]为以j项结驶尾的i段和源的最菜大值,则需雀要枚柔举此陶段开当头y和上冲一段旷结尾x,即d[幅i,托j]=床ma辞x{恶d[烧i-扛1,拨x]拿+a[青y.矿.j]}每次细需要披枚举x<龙y<株=j弦,决策纸量为O(盘n2),状态谈为O(概nm),共O(刚n3m)注意感到如丝式果a[呈j-碑1]也是佛本段桂的,答案敌变成界为d[跌i,把j-混1]洋+a谢[j弃],因此俱方程项优化战为d[卡i,读j]=更ma牢x{姑d[鹿i,尤j-浸1]纷+a窗[j臂],规d钻[i贡-1您,x岔]+苍a[继j]睛},荒x汁<j分析优化此后状扫态仍来然是软二维牧的,垒但决哨策减斯少为O(蒜n),总O(袋n2m)可以哑继续蹦优化.注意药到时丹间主款要耗跟费在匙对x的枚呀举上,计算ma炉x{宿d[音i-访1,执x]被}.这个为值…我们甩把d的第义一维攻称为”阶段祖”,则本怨题是膊典型各的多汗阶段容决策渴问题计算鲁一个挨阶段牙时,顺便镜记录本阶侧段最堪大值只保当留相荷邻两诊个阶言段(滚动崇数组)则时叨间降府为O(毁nm),空间钞降为O(蹲n)六、0-银1背包涂问题给定n种物殖品和域一个园背包,物品i的重驼量是wi,价值映是vi,背包瞎容量拿为c对于牢每个凶物品鸭,要挡么装铲背包嫂,要牢么不乱装选择趣装背爆包的尝物品应集合早,使湿得物狡品总无重量势不超轮过背代包容涌量c,且价搭值和填尽量街大分析设d[杯i,摊j]为背红包容剥量为j时,只考稀虑前i个物断品时暑的最曲大价往值和如果涨装第i个物砖品,背包呼容量株只剩j-赠wi如果铲不装,背包敌容量雄不变因此d[覆i,声j]=ma延x{毁d[要i,太j-诉wi]+乖vi,却d[友i-州1,买j]妥}状态其有nc个,每个肤状态捎决策熄只有限两个,因此帮总时意间复芬杂度避为O(流nc).用滚私动数汪组后,空间疫复杂热度只万有O(团c)分析当c大时,算法抱效率半非常银低.事实尚上,浊由于c是数值砍范围撇参数,一般姑不把览它看底作输侍入规堪模.这样神的O(快nc)只是志一个灿伪多体项式白算法事实主上

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论