表示式求值演算法比較

2022-11-11 20:30:06 字數 4845 閱讀 2289

2o10年2月電腦學習第1期

司慶福』

程書偉摘要:論述了表示式求值相關暮法的實現過程及分析。關鍵詞:表示式求值計算機敦值適算中圖分類號:tp312

文獻標識碼:a文章編號

slqing ̄

1表示式求值介紹

示。目前常用的表示式種類主要包括中綴表示式與字尾表中綴表示

字尾表示

達式兩種。中綴表示式即平常使用的數學表示式,如:lx3xab+

ab+(5+2)一7,特點是符合人類的思維習慣,使用者使用起來很

順手。字尾表示式又稱為逆波蘭式,是波蘭邏輯學家

於1929年提出的另一種表示表示式的方法,按從上面的例子可以看出:

此方法,每一運算子都置於其運算物件之後,故稱為字尾表(1)在兩種表示中,運算物件出現的順序相同.

示。這種表示法的乙個特點是,表示式中各個運算是按運算

(2)在字尾表示中,運算子按實際計算順序從左到右符出現的順序進行的,故無須使用括號來指示運算順序,因排列,且每一運算子總是跟在其運算物件之後。

而又稱為無括號式。下面對照地給出一些表示式的兩種表由於原來提出的是字首表示,即把每一

沒有音軌。在實際使用過程中,有時會出現無法儲存為mpv格式的情況,這時可先將其轉換為mpg格式,再用超級解霸3500開啟mpg檔案,重新利用上述方法將其轉換為mpv格式。

值得注意的是,該步轉出的**最終格式必須為mpv格式,因為mpg格式無法被premiere正確載入進行**格式編輯與匯出

在premiere中載入已擷取的mpv檔案,將其依次拖到時間線上,即可實現多**編輯。關於更多的資訊,可參考

premiere的幫助檔案及相關書籍,本文不再過多介紹。

多**檔案在premiere中編輯後,可用export進行**檔案匯出。值得注意的是匯出要選擇而

圖1encoding中custom的詳細設定

不是匯出預設為avi格式**,轉換速度慢且

插入到ppt頁面中去。mpv格式的主要優點是可隨意改變會嚴重影響**檔案清晰度中選擇folder,**的橫縱比而不像avi等多**格式無法改變橫縱比。

encoding中選擇custom,詳細的設定如圖l所示。經實際使

3結束語

用比較,兩種匯出方案在轉換速度上相差至少6o倍。

本文應用超級解霸3500和兩款圖l中要勾選否則可能會出現無法導

軟體實現了將dvd高畫質素材應用到ppt中的無損轉換。推出的情況。匯出的檔案格式為vob,存放在匯出資料夾的

薦使用。

vtdeo

_ts資料夾內。

參考文獻

2.3超級解霸3500檔案格式轉換及匯入ppt中

【11超級解霸3500幫助文件.】

利用2。1中的方法,將rob格式轉換成mpv格式。在幫助文件.ppt中應用插入一影片一檔案中的影片,即可將多**素材

f3】mi凹幫助文件.

收稿日期:2009一ll—l9

司慶福大慶師範學院計算機系本科生(黑龍江,大慶l637l2)。

127運算子置於其運算物件之前。例如,中綴式a+b和相應的字首表示分別為因此,為了區分字首和字尾表示,通常將字尾表示稱為逆波蘭表示。

根據以上兩種常用表示式的表示方法,可以得到兩種表示式求值的演算法。為了簡化問題,便於理解,這裡只進行加、減、乘、除以及加括號的表示式求解。

2中綴表示式求值

首先,四則運算的規則如下:(1)先乘除,後加減;(2)從左到右算:(3)先括號內,後括號外。

任何乙個表示式都由如下三部分組成:運算元(operand)和操作符以及界限符一)。

一般運算元可以是常數,也可以是變數,運算子包括算術運

算符和邏輯運算子,本文只討論算術運算子。界限符包括左右括號以及表示式結束符等。在這裡將運算子和界限符統

稱為算符,並將他們的集合命名為op。根據四則運算的規則,在每一步運算中,任意兩個出現的算符x,y之間有如下關係:x<yx的優先順序低於yx=yx的優先順序等於yx>y

x的優先順序大於y

假設輸入的表示式沒有錯誤,則實現中綴表示式求值的演算法如下:

定義兩個棧opnd,0pm,分別存放運算子和運算數。

基本思想是:一次讀入表示式的每個字元,若是運算元則進棧(stack2),若為操作符則與棧stackl中的棧項運算子比較,此處設表示式中當前掃瞄到的操作符為x,stackl中棧頂操作符為y.則有如下兩種情況:

(1)x<y或x=y運算元棧出棧兩次,得到兩個運算元

a、b,運算子棧出棧一次,得到操作符m,對a、b進行m運算,將結果入運算元棧(smck1)。

(2)x>y此時操作符入棧。

重複進行,一直掃瞄到表示式尾部為止.

(3)針對四則運算的第三條規則,定義「(的優先順序最低,「)」的優先順序最高,並且當掃瞄到「)」時一直計算到運算子棧中的「(」出棧為止。

(4)由於按照演算法最後總有一步運算沒有計算,如3(5+2)一15最後運算子棧中有乙個「×」,運算數棧中為21、5,所以在表示式的頭和尾各新增乙個輔助運算子「#」,

從而輔助演算法計算。

演算法實現如下:

compute()i):

囂 ){

{不是運算子則進棧

lelse

c88e,<∥棧頂元素優先權低

cbreak;

ca8e,-

脫括號並接受下乙個字元p叩i

case ,:∥退棧並將運算結果入棧

叩(opnd ̄);

pil量

break;)}

1.precede:判定運算子棧的棧項運算子x與讀入的運算子0之間的優先關係的函式進行二元運算x0y的函式。一

例如求解3(7-5)+3的運算過程如下:

一表示式字串處理後為:檔li(7—5)+

表1步驟 opir棧 opnd棧掃瞄字元

操作乙 ()3#(37

一7)4撐

#(.一#6

+push(opt凡,+ )8桴+

63群9

群return 9

3字尾表示式求值

字尾表示式值分為兩步,首先將中綴表示式轉化為字尾表示式,然後對字尾表示式求值。

把中綴表示式轉換為字尾表示式演算法的基本思路是從頭到尾地掃瞄中綴表示式中的每個字元,對於不同型別的字元按不情況進行處理。

將加減運算子的優先順序設定為1,乘除運算子的優先順序

(6)當掃瞄到8l中的,@ 字元時,s2和r為:

r:10

s:@一

(7)當整個處理過程結束後,r棧為空,s2為一#,字尾表示式中每個元素都用空格隔開。

設定為2,在棧中儲存的特殊運算子和 (的優先順序設定

為0。則運算過程如下:

(i)若遇到的是空格則認為是分隔符,不需要進行處

理。字尾表示式求值的演算法相對於中綴表示式要簡單,其演算法思想為:

(2)若遇到的是數字或小數點,則直接寫入到s2中,並(1)若表示式是運算數,則入棧。

在每個數值的最後寫入乙個空格。

(3)若遇到的是左括號,則應把它壓入到運算子棧中,待以它開始的括號內的表示式轉換完畢後再出棧。

(4)若遇到的是右括號,則表明括號內的中綴表示式已

經掃瞄完畢,把從棧頂直到儲存著的對應左括號之間的運算子依次退棧並寫入s2串中.

(5)若遇到的是運算子,則有:

①當該運算子的優先順序大於棧項運算子的優先順序時,表明該運算子的後乙個運算物件還沒有被掃瞄也沒有被放入到82串中,應把它暫存於運算子棧中,待它的後乙個運算

物件從sl串中讀出並寫入到82串中後,再令其出棧並寫入82串中。

②若遇到的運算子的優先順序小於或等於棧頂運算子的優先順序,表明棧頂運算子的兩個運算物件已被儲存到b2串中,應將棧頂運算子退棧並寫入到82串中,對於新的棧頂運算子仍繼續進行比較和處理,直到被處理的運算子的優先順序大於棧項運算子的優先順序為止,然後讓該運算子進棧即可。

按照以上過程掃瞄到中綴表示式結束符,群時,把棧中剩餘的運算子依次退棧並寫入到字尾表示式中,再向82寫入表示式結束符鋒和字串結束符整個轉換過程就處理完畢,在82中就得到了轉換成的字尾表示式。

例如,設中綴算術表示式81為使用的運算子棧用r表示,則轉換過程如下:

(1)開始時存放字尾表示式的字串b2為空,r中壓

入有算符,它具有最低的優先順序0。

s;r:@

(2)當掃瞄到s1中的左括號時,s2和r中的資料變化如下:

s:l o

r:@+(

(3)當掃瞄到81中的數值3時,s2和r中的資料變化為:

s:l o

(4)當掃瞄到8l中的右括號時,s2和r變為:

s:l 0

i8 9 3

+r:@+

(5)當掃瞄到81中的數值15時,s2和r又變為:

(2)若表示式是運算子,則出棧兩個數並對這兩個數進

行運算,將結果入棧。

演算法描述為:

compute()

(廝籠初始化

麒入乙個運算數或運算子審)(

f砌果c是運算數,則將其轉換為數值**棧

jelse

{叩礎棧兩個運算

數,並且進行運算

腐運算結果入棧ll}

4結束語

這兩種方法各有優缺點。中綴表示式的特點是符合人類的思維習慣,而字尾表示式卻更有利於計算機求值,便於進行程式設計。但是讓使用者直接輸入字尾表示式也不現實.所以通常的折衷方案是將中綴表示式轉化為字尾表示式後求值。

對於非互動系統(即輸入是事先設計好的,儲存起來的系統)來說,更是可以將轉化後的字尾表示式儲存在儲存器

中,從而提高系統效能,又能給使用者提供高效的使用者體驗。

參考文獻

【i嚴蔚敏,l】吳偉民,著.資料結構(c語言版)【北京:清華大學出版社,1997-04.

等,著.演算法導論【m】.北京;機械工業出版社,

2006- ̄.

【3】高德納,著.計算機程式設計藝術町.北京:國防工業出版社,

2002.

等,著.資料結構與演算法.北京:清華大學出

版社,2003一l2.129

表示式求值

課程設計報告 課程名稱資料結構 課題名稱表示式求值 專業電腦科學與技術 班級0901 學號 200903010102 姓名覃宇星 指導教師李珍輝鄧作傑郭芳 2011年7月7日 湖南工程學院 課程設計任務書 課程名稱 c語言程式設計 課題表示式求值 專業班級計算機0901 學生姓名 學號指導老師周鐵山...

實驗四算術表示式求值

源 include include include define plus 0 define minus 1 define power 2 define divide 3 define leftp 4 define righp 5 define startend 6 define digit 7 d...

算術表示式求值課設報告

資料結構課程設計 設計說明書 數學與電腦科學學院 2012年 9月 7日 資料結構課程設計評閱書 注 指導教師成績60 答辯成績40 總成績合成後按五級制記入 課程設計任務書 2011 2012學年第2學期 專業學號姓名 課程設計名稱資料結構課程設計 設計題目表示式求值演算法的實現 完成期限 自 2...