动态规划算法的表达技巧分析

来源 :知识力量·教育理论与教学研究 | 被引量 : 0次 | 上传用户:sdnuwjz
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  [摘要]动态规划算法是计算机领域中一种非常有效的算法,而对于很多要掌握它的学生而言,往往会表现出很大的困惑性,本文介绍了动态规划算法的三种表达技巧,并详细阐述了较难掌握的部分存储的动态规划算法。
  [关键词]子问题 辅助存储单元 全部存储 部分存储
  
  一、引言
  动态规划算法是一种以空间换取时间的算法,这里的空间即指计算过程中所用到的辅助存储单元。
  经过我们多次分析发现,动态规划算法通常有三种表示形式,并且它们具有相同的时间复杂度和可供选择的空间复杂度。选择不同的空间复杂度,即选择了不同数量级的内存分配。对于一个算法而言,通常考虑较多是的其时间复杂度,而动态规划算法,其空间复杂度却非常值得深入考虑,能否减少辅助存储单元,并在它的前提下尽可能让算法时间复杂度得到优化,是一个值得分析的问题。
  本论文首先介绍动态规划算法的三种写法,然后对其中的一种写法进行深入分析,介绍如何减小空间复杂度的方法,并结合acm竞赛问题,介绍了一种利用指针技巧减少运算量的方法,使得算法在减少内存的同时仅仅增加了微不足道的运算量。
  二、动态规划算法的三种常用写法
  能够运用动态规划算法求解的问题都可以用一个递推关系式来表达,此递推关系的基本原理即是:将所要求解的原始问题分解成规模较小的子问题来做,而子问题可以依据同样的分解原理分解成更小的子问题,直到不能分解为止,不能继续分解的问题称为最小规模的子问题,它的结果是已知的,按照分解的逆过程,由小规模子问题的结果可以推算出较大规模子问题的结果,直至最终推算出原始问题的结果。这个递推关系式其实就是一种递归描述,并且递归描述中用来表示子问题的部分必然是是重复出现的。
  动态规划算法的本质就是用一些辅助存储单元将这些重复出现的子问题结果保存起来,在每一个子问题第一次被计算出来后存储在其相应单元中,如果在后续计算过程中,一个已经有结果的子问题被要求再次计算时,动态规划算法就直接取用已经存储的结果,而不是像原始递归一样去重复计算,这样就保证了一个子问题只计算一次,从而大大减少了运算量。对于一个只有n个子问题的原始问题,原始递归往往会付出指数数量级的运算代价,而动态规划只需要付出Θ(n)的运算代价(假设算出一个子问题结果需要时间为Θ(1))。
  例如,斐波那契数列的递归描述为:
  
  其中n为正整数,f(n)表示数列中第n项的值,为方便算法表达,假定n<100,不考虑整数溢出问题,其递归和三种动态规划算法分别如下。
  
  
  
  
  
  
  
  
  
  递归写法的时间复杂度为Θ( ),空间复杂度为Θ(n),动态规划的三种写法时间复杂度均为Θ(n),其中写法一与写法二的空间复杂度是Θ(n),而写法三的空间复杂度是Θ(1),它比前两种写法的空间复杂度要低一个数量级。换一个角度讲,写法一与写法二是存储所有子问题的动态规划算法,而写法三是存储部分子问题的动态规划算法。
  在运用动态规划算法解决问题时,辅助存储单元的数量级可以根据具体情况进行选择。如果所有子问题的数量级太大而超出存储要求,可以考虑低一个数量级存储的动态规划算法,虽然这种写法可以计算出某一个目标值,但是由于它所对应的存储单元被反复改写,保留的信息是有限的。例如,上面动态规划算法写法一和写法二,不仅求解保存了第n项的值,其前n-1项的值都被计算保存了,而写法三虽然计算出了第n项的值和前面相邻第n-1项的值,但是前n-2项的值已经无法获取,因此,这种节省内存的算法只适合于求解目标值较少的问题。
  三、时间、空间复杂度的分析及改进策略
  动态规划算法的时间、空间复杂度主要取决于子问题的个数,子问题个数由递推关系式中反映问题规模的参变量决定,其时间复杂度与子问题个数成正比,而空间复杂度取决于对子问题结果的存储方式。一般而言,对子问题结果进行全部存储,是最为常用的一种策略,可以在此基础上提出一种改进策略为部分存储。有些问题需要存储全部的子问题,才能完成目标计算任务,而有些问题可以只用存储部分子问题,即可完成目标计算任务。
  1.时间复杂度分析
  动态规划算法的时间复杂度(记为T(n))取决于所有子问题个数的数量级(记为C(n))和每一个子问题被计算出需要付出的时间代价(记为x(n)),那么以上三种写法的动态规划算法的时间复杂度相同,并且均为公式一。
  T(n)=C(n)*x(n) (公式一)
  2.空间复杂度分析
  类似于时间复杂度分析,动态规划算法的空间复杂度(记为G(n))取决于所有子问题个数的数量级(记为C(n))和存储一个子问题所用的存储代价(记为g(n)),那么存储所有子问题的动态规划算法空间复杂度为公式二。
  G(n)=C(n)*g(n) (公式二)
  3.改进策略
  对上面空间复杂度的一种改进策略是,采用部分存储的方式,将空间复杂度中的C(n)降低到C’(n),其对应计算式为公式三。
  G(n)=C’(n)*g(n) (公式三)
  例如一个子问题个数为n2的问题,存储所有子问题时,通常可以用n×n大小的二维数组,其空间复杂度为θ(n2);存储部分子问题时,可以只存储该n×n方阵中的一行(列)或几行(列),其空间复杂度为θ(n)。前面介绍的费波那契数列的动态规划算法写法三,即是将空间复杂度由θ(n)降低到θ(1)之后的一种结果。
  部分存储的改进策略,一般可以将空间复杂度降低一维,尤其是当n较大时,这种降维的效果会非常明显。空间复杂度降低一维之后的动态规划写法,可以模仿前面的写法三。
  四、改进策略的应用
  一般情况下,存储部分子问题比存储所有子问题的动态规划算法要付出更多的运算量,甚至可能会高出一个数量级,但是,可以结合一些特殊技巧改进运算量,使其空间复杂度保持在公式一的情况。下面结合北大ACM网站上的一道题目1159,介绍动态规划算法改进策略的运用。
  求往一个字符串中最少插入多少个字符可以使其变成回文字符串[1]。分析过程如下,假设字符串为a[1]~a[n],其长度为n,用f(i,j)表示a[i]~a[j]部分要变成回文需要插入的最少字符个数,其中1≤i≤j≤n,f(1,n)即为原始问题,则有如下递归描述:
  
  
  由递推式可知,对子问题全部存储的空间复杂度是θ(n2),其对应f(i,j)在存储矩阵中的逻辑关系如下图。
  
  
  
  
  
  根据动态规划算法思想和递推式分析,在计算f(i,j)之前,必须保证f(i,j-1),f(i+1,j-1),f(i+1,j)已经被计算出并被保存,因此对于此矩阵中上三角部分的求解,其计算顺序可以采用从下往上逐行计算,每一行元素计算时从左往右进行的方式;另外,部分存储策略中最节省存储单元的方法是,只保存在计算顺序上从f(i+1,j-1)到f(i,j)范围内的子问题结果,其算法是每计算出一个f(i,j)准备计算下一项f(i,j+1)时,将f(i+1,j-1)到f(i,j)范围对应的存储单元循环迭代,从而运用同样的循环语句完成整个计算过程,最后计算的一项即是右上角的原始问题f(1,n)。
  为了避免这里面的循环迭代计算,可以采用与最节省存储单元等数量级的另外一种部分存储策略,即存储图中从f(i+1,j-1)到f(i,j)范围内所有行的子问题结果,算法中用p1,p分别表示这两行,显然,p行中子问题f(i,j)对应的元素为p[j],其它子问题对应元素同理。当p行计算结束后,按子问题计算顺序算法会接着计算p行的上面一行,我们对p,p1采用指针的技巧,当p行计算结束后,交换一下p与p1所指向的存储单元即可,从而减少对存储单元反复迭代的计算部分,其算法实现如下面代码所示。
  
  
  
  
  
  
  
  
  
  
  
  五、结束语
  本文对动态规划算法的空间复杂度提出了一种改进思路,并结合程序设计竞赛问题阐述了这种策略的详细设计过程,与广大师生,尤其是参加程序设计竞赛的学生,共同探讨了动态规划算法的表达技巧和改进技巧。
  [参考文献]
  [1] http://poj.org/problem?id=1159
  (作者单位:1.湖北经济学院信息管理学院,2.武汉大学珞珈学院)
其他文献
[摘要]改革开放以来,农村职业教育取得了长足发展,为农村经济发展起到了重要的促进作用。但是农村生产力水平不高,农业生产方式落后,农民增收缓慢等问题仍很突出,究其原因,很重要的一点在于职业教育发展滞后,农民科学文化素质偏低。  鉴此,本文阐述了如何全面振兴农村职业教育,有效地发展职业教育在县域经济发展中的龙头作用,探索为农民服务的最佳途径,为农村经济培养出一批懂经济、会管理的专业技术人才,是我们当前
期刊
[摘要]创新创业意识的培养必须与大学生个性化发展紧密结合起来,应通过制定科学的人才培养方案,构建灵活的学分制管理体系,深化教学考核改革,尊重学生的发展选择;通过搭建合理的课程平台,提供自主学习空间,引导自主创新,优化学生的个性化发展环境;通过建立精干高效的师资队伍,营造个性发展的氛围,鼓励个性化人才脱颖而出,提升学生的发展水平;最终实现创新创业意识的养成,实现差异华就业。  [关键词]个性化发展
期刊
[摘要]服装cad课程教学是推广cad技术在服装产业中应用的一个重要的环节,在具体教学过程中,因学生特点、课程性质、教学环境等因素制约而出现新问题。据此提出了关于教学方面改进的建议。  [关键词]服装cad 课程教学 问题 改进    服装CAD是电脑辅助服装设计即Computer Aided Design in Clothing Engineering,是电脑在服装专业领域内的应用实例。计
期刊
[摘要]当前中国高等教育已由规模发展向内涵发展转变,加强内涵建设,提高教学质量,是新时期高等教育的使命。教务管理作为高校教学管理工作的核心,其水平高低直接决定了高校人才培养质量的高低。本文以研发“学生出国材料自助打印系统”为例,探讨在教务管理工作中坚持科学管理,加强内涵建设,运用现代科技手段,能够使教务管理工作更加科学、规范、高效,提升管理水平,提高工作效率。  [关键词]高等教育 内涵 管理 效
期刊
[摘要]以人美版第十八册第九课《我们身边的美术遗存》为契机,指导学生利用网络,学会对所需美术作品信息的收集,处理和运用的能力,搭建学生自主学习的平台。  [关键词]美术教学 信息收集    新课标明确指出,现代社会要求公民具备“运用现代技术收集和处理信息的能力”。于此相应,教材增加了有关收集资料等方面的要求。这为培养学生收集,处理及运用信息的能力提供了很好的探索实践平台。主题活动就是其中很有特色
期刊
[摘要]信息时代的快速发展对人们的素质提出了新的要求,更对教育提出了新的挑战。传统教学方式已不能迎接这种挑战。将信息技术整合于课堂教学的教学改革势在必行。将现代信息技术与课堂教学结合起来,有助于诱发学生学习的主动性,激发学生的想象力和求知欲,提高学生思维能力,从过去传统的“1支粉笔+1块黑板+1张嘴+1本书”单一的传统教学模式和呆板式教学思维定势中解放出来,对于优化教学结构,提高教学效率起到了重要
期刊
[摘要]电子技术实验是一门理论与实践相结合的专业基础课,本文分析了目前电子技术传统实验教学在教学模式、教学资源管理等方面存在的不足,并因此提出了在计算机虚拟仿真技术和互联网络高速发展的时代背景下,对电子技术虚拟实验网络教学的应用进行了探索。  [关键词]电子技术实验 实验教学改革 虚拟实验网络教学    一、引言  实验教学是高等院校培养高素质合格人才的重要手段,它有助于巩固和加深学生对理论知识的
期刊
[摘要]目前体育教学改革的目标是“体育教学面向全体学生,还应满足学生个体的需要”。在课堂教学中,全体学生都能够在时间、参与、以及体质提高上得到平等的教育。  [关键词]体育课 调动 积极性 方法    体育课与文化课相比较,其教学目的及表现形式均有所不同,它是一门以身体练习为主要手段,增进学生健康的课程。男生天性好动,表现欲强,并积极、主动、活跃的配合老师,故想上好男生的体育课相对容易些。而
期刊
班干部作为联系班主任与学生的桥梁、班主任的助手,他们工作能力的强弱、工作热情的高低、工作方法的科学与否,在同学中威信的高低,往往能够决定一个班级的精神面貌。因此,班主任要管好带好一个班级,形成良好的班风、班貌,关键要选拔、培养、使用好一批热心于班级工作的班干部。在管理班级工作中如何培养和使用班干部。我認为要做好下面几个关键环节:  一、选班干部的条件  不少班主任在选班干部时把学生的学习成绩作为衡
期刊
[摘要]新加坡地少民寡资源稀缺,所以非常重视人力资源的开发利用,在人力资源的开发上,力图人尽其才。面对知识经济带来的变革与挑战,新加坡十分重视将基于能力的教育理念实践于基础教育,培养青少年的生活能力,促进其终身受雇能力的发展。  [关键词]青少年 基础教育 就业必备技能    一、经济背景  新加坡是一个面积632平方公里人口390万的岛国,1965年从马来西亚独立。在短短近40年间从一个资源匮乏
期刊