moea_joint_essay
105年
[統計資訊] 資料庫及資料探勘、程式設計
第 一 題
📖 題組:
請依算術運算式(((9+1)*3)/((7-6)+5))-((2*(3-2))+1),回答下列問題:
請依算術運算式(((9+1)*3)/((7-6)+5))-((2*(3-2))+1),回答下列問題:
📝 此題為申論題,共 4 小題
小題 (一)
請繪出此算術運算式之二元樹,其終端節點均為運算元(1、2、3、5、..),非終端節點均為運算子(+、-、*、/)。(5 分)
思路引導 VIP
利用運算符號優先級與括號來建構樹狀結構。最外層的減號是樹的根節點。左子樹是除法結構,右子樹是加法結構。
小題 (二)
為求得運算式之值,可採「中序(infix)」、「前序(prefix)」或「後序(postfix)」等表示法,請從記憶體耗用、程式複雜度觀點,比較此 3 種表示法何者較佳?為什麼?(6 分)
思路引導 VIP
從記憶體耗用與複雜度考量,通常以「後序(postfix)」最佳,因為它不需要括號且能僅用一個堆疊完成 O(n) 的一次性掃描計算。
小題 (三)
請將此運算式,改為後序表示法(postfix expression)。(5 分)
思路引導 VIP
將中序式依樹的後序走訪規則(左->右->根)列出。
小題 (四)
欲使用堆疊(stack)來求得此算術運算式之解,請畫出該堆疊的資料歷程變化。(6 分)
思路引導 VIP
將後序式的元素逐一掃描並操作堆疊 (push 運算元,遇到運算子時 pop 兩次進行運算並將結果 push 回堆疊)。