設萬維讀者為首頁 廣告服務 技術服務 聯繫我們 關於萬維
簡體 繁體 手機版
分類廣告
版主:
萬維讀者網 > 靈機一動 > 帖子
表達式的優化處理
送交者: 田苗 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 | 全球最佳航空公司出爐:海航獲五星
海外華人福利!在線看陳建斌《三叉戟》熱血歸回 豪情築夢 高清免費看 無地區限制
一周點擊熱帖 更多>>
一周回復熱帖