一种形式化开发非递归算法方法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种形式化开发非递归算法方法

一种形式化开发非递归算法的方法   摘要:提出了一种简单、统一的形式化开发非递归算法的方法。该方法直接面向非递归算法,在形式化方法PAR的指导下,使用循环不变式的开发新策略,在得到求解递归问题的循环不变式的同时,能直接得到易读、高效且可靠的非递归算法,并通过一个具体实例进行了阐述。对使用形式化方法及循环不变式开发新策略开发非递归算法的方法作了较深入的实践和探讨。   关键词:形式化方法; 非递归; PAR; 循环不变式; 可靠性   中图分类号:TP311.1文献标志码:A   文章编号:1001-3695(2007)11-0203-03      0引言      计算机科学中有多种数据结构,如广义表、树、二叉树等,都是通过递归方式定义的。由于其本身固有的递归性质,关于它们的许多问题的求解算法均可以较容易地通过递归技术加以实现;除此之外,某些常用的算法设计方法,如分治法等,会自然导致递归算法的产生。   然而,递归程序的执行过程相当于多个函数的嵌套调用,并且被调函数是主调函数本身,在执行过程中,随着控制的转移,必然导致大量参数的传递和一次次额外空间的分配,增加了时空的耗费。虽然利用递归技术设计出的算法程序具有结构清晰、可读性强、便于理解、易用数学归纳法证明等优点,但在追求执行效率,特别是使用不支持递归的程序语言的场合下,人们更愿意使用非递归算法来解决递归问题。??   目前已开展过很多递归消除方面的研究工作[1~3]。与这些工作不同的是,本文提出的方法以形式化方法为基础,直接面向非递归算法的开发,而不是事后的递归消除。??      1开发非递归算法的方法??      文献[4]中提出了开发未知算法程序的循环不变式新策略。该策略非常有效,尤其在使用它的递归定义技术开发一个具有内在递归属性的迭代程序的循环不变式时,这种策略更加有效。对于此策略,笔者采用简单实用的支持程序开发全过程的形式化方法PAR来确定问题求解的总策略。文献[5]中提出了PAR方法及相应的算法设计语言Radl和抽象程序设计语言Apla,并已开发出Apla程序到Java、C++/C#、Delphi等高级语言程序的系列自动转换工具。??   将PAR方法与循环不变式开发新策略中的递归定义技术相结合,得到如下的开发递归问题的非递归算法程序的方法:a)尽可能形式化地构造问题的Radl功能规约(AQ,AR)。b)把待求解的问题分划成若干与其结构相同但规模更小的子问题。c)依据分划的形式对功能规约进行变换,以获得待求解问题与其子问题之间的递推关系。d)依据递推关系进行展开,得到解题的总策略,并引进三个变量x、q、S。其中:x用于存放已解决的子问题的解,其类型依具体问题而定;q用于存放当前正准备解决的子问题,其类型也是依具体问题而定;S为序列类型,用于存放未解决而尚待解决的子问题,起着堆栈作用;同时给出序列S中内容的递归定义。根据解题的总策略,可得到x、q、S间的关系,即为递归问题的循环不变式。e)根据递推关系及循环不变式,通过归纳推理获得非递归的Apla算法程序,然后证明其正确性。f)基于本文实现的支持Apla抽象数据类型的可重用部件库及自动程序转换系统,将Apla程序按需要自动地转换成各高级语言程序,如C++程序、Java程序等。??   对于不同的问题,使用该方法开发出的非递归算法程序非常简短,具有统一形式。??      2开发实例      2.1预备知识??   2.1.1序列??   序列是一给定类型的元素构成的有序表。设S表示一个序列,#S表示S中所含元素的个数,则序列S可以表示为[S??0,S??1,S??2,…,S??#S-1]。其中:序列头元素为S[h];尾元素为S[t];[]表示空序列。常用的序列操作有:??      3结束语??      在本文中,笔者阐述了结合PAR及循环不变式开发新策略开发非递归算法的统一方法,使用它形式化开发了最大最小元问题的非递归算法,进而得到求解该问题的Apla抽象算法程序,并对其进行了正确性证明。所得结果可在相应平台的支撑下进一步得到可执行程序。??   较之现有的递归消除方法,本文提出的方法由于结合了统一的形式化方法PAR,并有部件库及转换系统的支持而简单易用,开发出的非递归算法程序非常简短,抽象程度高。   另外,用传统的方法开发求解递归问题的循环不变式是比较困难的,其表达形式也十分复杂,不便于算法程序的形式推导和证明。本文阐述的方法直接面向非递归算法的开发。由于使用了循环不变式开发新策略中的递归定义技术,简捷地得到了循环不变式的简单表达形式,通过归纳得到非递归算法程序,并对其进行形式化证明,既能保证正确性,又提高了算法的效率。??   使用本文的方法

文档评论(0)

erterye + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档