设万维读者为首页 广告服务 技术服务 联系我们 关于万维
简体 繁体 手机版
分类广告
版主:
万维读者网 > 灵机一动 > 帖子
表达式的优化处理
送交者: 田苗 2006年12月19日14:24:28 于 [灵机一动] 发送悄悄话

上次我给出了处理表达式的一个方法。当时只考虑方法的正确性,但没有考虑优化,每消掉一项后,就从头开始。如远景城所指出的,那不怎么经济。这里我把那方法改进了一下,每消掉一项后,不再从头开始,消除了不必要的重复扫描。其实在一般情况下,两个方法没有多大区别,因为大多表达式都可以从左到右消项,不需要扫描到很右才处理,所以即使每消掉一项后就从头开始,也没有多少重复。我用实际程序对这方法作了比较,这优化过的方法,大约可以提高效率15%.

另外得说明一下的是,我用了象低级语言的方法,是为了方便描述起见。所谓的“去几”、“去几”,实际意思是在那里按步骤“几”的方法操作。另外在步骤1里的几个测试顺序也变了一下。先测试常见的(数字,操作符),效率也会提高一点。

假定与前面一样。一开始i=1,p,a和b为空(区别于0)。

1:如Q是操作数,去6。
  如Q是操作符(+,-,*,/),去5。
  如Q是左括弧'(',去2。
  如Q是右括弧')',去3。
  如Q是分号';',去4。
  其它,输入的表达式有错。终止。

2:i增加1,使a,b和p为空。回1。

3:如a和b都不空,则根据操作符p,处理a和b,把结果放在Q[i-3],使Q[i-2]和Q[i-1]为空,i=i-3。
  否则(a必定不空),使Q[i-2]=a,使Q[i-1]和Q为空,i=i-2。
  然后去9。

4:如a和b都不空,则根据操作符p,处理a和b,把结果放在Q[i-3],使Q[i-2]和
  Q[i-1]为空,i=i-3,去9。否则(a必定不空),a就是表达式的结果,处理结束。

5:如b为空(a必定不空),去7。否则(必定是a,b和p都不空),去8.

6:如a为空,使a=Q。否则(p必定不空),是b=Q。然后,i增加1,回1.

7:使p=Q,i增加1,回1。

8:如Q比p优先,则使a=b,p=Q,b为空,i增加1,回1。
  否则,根据p值的操作符,处理a和b,把结果放在Q[i-3],使Q[i-2]和Q[i-1]为空,i=i-3,去9。

9:如i等于1,则使a=Q,b,p为空,i增加1,回1。
  否则去10。

10: 如Q[i-1]是左括弧'(',使a=Q,b,p为空,i增加1。
  否则,使a=Q[i-2],p=Q[i-1],b=Q,i增加1。
  然后回1。

0%(0)
0%(0)
标 题 (必选项):
内 容 (选填项):
实用资讯
回国机票$360起 | 商务舱省$200 | 全球最佳航空公司出炉:海航获五星
海外华人福利!在线看陈建斌《三叉戟》热血归回 豪情筑梦 高清免费看 无地区限制
一周点击热帖 更多>>
一周回复热帖