中缀算术表达式轻量化求值算法.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文档。上传文档
查看更多
中缀算术表达式轻量化求值算法

中缀算术表达式轻量化求值算法   摘要: 针对当前中缀算术表达式求值算法笨重或者复杂的问题,提出了一种轻量化的中缀算术表达式求值算法。该算法基于逆向拆分中缀算术表达式的思路,使用递归解析的方法,等价于中缀算术表达式的构造二叉树表示。实验结果表明,该算法与传统逆波兰表达式(RPN)转换、求值算法相比,该算法无需做逆波兰表达式转换,无需人工栈辅助,实现代码量仅有其1/6,而效率仅下降6.9%。与W3Eval算法相比,该算法无需符号转置表,支持算符自定义或重定义,实现代码量不到其1/2。该算法实现代价低,适用于Web应用的Browser端,及嵌入式应用等轻量化应用场合。 关键词: 轻量化算法;中缀算术表达式;逆向拆分;逆波兰表达式;W3Eval 0引言 中缀算术表达式求值在编译系统以及各种涉及表达式计算的应用系统中被广泛使用。中缀表示法是一种通用的算术式或逻辑式的表示方法,其算符是以中缀形式位于两个算数的中间[1],例如:2+3。中缀表示法与人类日常习惯相一致,因此最为常用,但在使用计算机对表达式求值时,中缀表示法有诸多不便[2-3],故当前通用的是Donald Knuth于1962年提出的方法:将中缀表达式转换为后缀表达式,即逆波兰表达式(Reverse Polish Notation,RPN),然后再对RPN求值[1-3]。该方法适应性良好,理论成熟完备,时间复杂度低,适合在编译等复杂系统中使用;但是,其缺点为算法笨重、代码量大,且中缀表达式转换为RPN,以及对RPN求值均需要人工栈辅助[1-3]。 当前,Web应用中的Browser端由ECMA(European Computer Manufacturers Association)脚本实现的算法需满足轻量化的要求[4],嵌入式应用也要求算法轻量化,即结构简单,实现代价低,代码量小[5]。其中用到中缀算术表达式求值的多为一些人机接口中的内容,并没有类似编译系统这样的复杂需求,故使用RPN求值带来的程序复杂性增加与Web应用Browser端和嵌入式应用的轻量化需求不符。 1轻量化算法研究现状 2001年,ABIT Ltd.的软件工程师Stepan[6]提出了一种名为W3Eval的算法,并在2006年和2007年进行了两次版本升级。根据文献[6]的叙述,该算法对中缀算术表达式求值时,无需做RPN转换,可直接求值,且无需人工栈辅助,其代码量较传统RPN算法有将近2/3的缩减,是一种轻量化的算法。但是,该算法使用了符号转置表[6]对算符、算数以及算符优先级进行标记,在提高算法适应性的同时也增加了复杂性;并且,由于该算法对表达式进行正向解析[6],使得该算法较为晦涩难懂。当然,该算法有支持符号量运算[6-7]、支持复数和矩阵运算等优势。 此外,还有表达式构造树求值算法[7]、人工智能表达式求值算法[8]等中缀算术表达式求值算法,但此类算法仅适用于一些特殊领域,其代码量较传统RPN求值算法甚至更为笨重和复杂[7-8],不具备轻量化的特征。 本文针对上述问题,以轻量化为目标,以表达式逆向拆分为方法,做了以下工作: 1)提出了一种无需进行RPN转换、无需人工栈辅助,可直接对中缀算术表达式求值的轻量化算法; 2)采用递归的设计思路,使本文算法的结构得到了进一步的精简; 3)对本文算法的正确性进行了证明; 4)将本文算法与传统RPN算法以及W3Eval算法进行了对比及实验测试。 通过以上工作,本文提出了一种全新轻量化的,适用于Web应用Browser端和嵌入式应用的中缀算术表达式求值算法。 2算法设计 2.1总体思想 定义1设a1、a2为算数,op为二元算术算符,则称形为a1 op a2的中缀算术表达式为最简中缀算术表达式,简称最简式。 引理1退去中缀算术表达式中的括号等价于重定义该括号中的算符。 证明设中缀算术表达式为: 对式(5)的求值与式(3)的求值相同,因此命题成立。证毕。 传统中缀算术表达式求值之所以要先转换为RPN,其原因是中缀算术表达式中的算符有不同的优先级,且可以使用括号来改变优先级,这个规则使用计算机直接处理是非常不便的。相对的,RPN中的算符没有优先级,也不存在括号,使用计算机处理时只需按照压入和弹出人工栈的顺序进行处理,因此比较简单直接。本文采用一种完全不同的思想,根据定理1,将中缀算术表达式按照算符优先级进行递归拆分,即以算符为拆分轴,分层次将中缀算术表达式拆分至定义1所述的最简式,然后由下向上逐层求值。显然,该方法正是手工对中缀算术表达式求值过程的一种逆向模拟。 对于一元算符,可通过添加特殊的左算数将其转换为相应的二元算符,例如-a可表

文档评论(0)

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

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

版权声明书
用户编号:7042123103000003

1亿VIP精品文档

相关文档