表达式的优化处理 |
送交者: 田苗 2006年12月19日14:24:28 于 [灵机一动] 发送悄悄话 |
上次我给出了处理表达式的一个方法。当时只考虑方法的正确性,但没有考虑优化,每消掉一项后,就从头开始。如远景城所指出的,那不怎么经济。这里我把那方法改进了一下,每消掉一项后,不再从头开始,消除了不必要的重复扫描。其实在一般情况下,两个方法没有多大区别,因为大多表达式都可以从左到右消项,不需要扫描到很右才处理,所以即使每消掉一项后就从头开始,也没有多少重复。我用实际程序对这方法作了比较,这优化过的方法,大约可以提高效率15%. 另外得说明一下的是,我用了象低级语言的方法,是为了方便描述起见。所谓的“去几”、“去几”,实际意思是在那里按步骤“几”的方法操作。另外在步骤1里的几个测试顺序也变了一下。先测试常见的(数字,操作符),效率也会提高一点。 假定与前面一样。一开始i=1,p,a和b为空(区别于0)。 1:如Q是操作数,去6。 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。 4:如a和b都不空,则根据操作符p,处理a和b,把结果放在Q[i-3],使Q[i-2]和 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。 9:如i等于1,则使a=Q,b,p为空,i增加1,回1。 10: 如Q[i-1]是左括弧'(',使a=Q,b,p为空,i增加1。 |
|
|
![]() |
![]() |
实用资讯 | |
一周点击热帖 | 更多>> |
一周回复热帖 |
|