表達式的優化處理 |
送交者: 田苗 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。 |
|
|
|
實用資訊 | |