資料結構與演算法分析之逆波蘭演算法

2022-05-06 17:57:08 字數 975 閱讀 5036

何為逆波蘭演算法?逆波蘭聽上去真的很拗口應該是一名波蘭數學家或者什麼家發明的吧,還是叫它字尾表示式可能正常一點。我們常規的加減乘除可以叫中綴表示式,這種對數字的計算方式作為人類是非常容易理解的。但是往往人類能夠輕易理解的,對於計算機而言卻是一件十分痛苦的事情。畢竟計算機其實像個沒有疲勞的傻孩子一樣,你讓他一直做什麼它就會一直做什麼,而且你還要手把手教這個孩子做事情才行(近年來人工智慧貌似已經打破這個限制了)。進入正題

那麼字尾表示式到底是什麼?

中綴表示式: 1+5+6*5+3

對應的字尾表示式則是: 15+65*+3+

是不是覺得很難接受?對於很多考研沒有工作經驗的同學而言,其實直接學習資料結構和演算法分析是一件比較痛苦的事情。字尾表示式為什麼對計算機而言更加容易接受,那就是因為大多數資料儲存都是使用的棧。而棧有個很明顯的特點那就是lifo,也就是後進先出。而且最重要的是棧的操作時間複雜度基本上都是常數。對於現代計算機而言更多是追求效率犧牲空間,由於硬體的急速發展空間儲存已經完全能夠滿足。對於計算機而言,上述字尾表示式的操作過程如下

一、讀取到1,非計算符號放到棧底

二、讀取到5,非計算符號放到棧底

三、讀取到+,是計算符號彈出棧底兩個元素進行+操作後再放回棧底

四、讀取到6,非計算符號放到棧底

五、讀取到5,非計算符號到棧底

六、讀取到*,是計算符號彈出該符號下兩個元素,即5和6,進行該符號操作後放回棧底

七、讀取到+,是計算符號彈出30和6,進行該操作

八、讀取到3,非計算符號放到棧底。節省筆墨,兩步一起說明。然後再讀取到+,是計算符號,彈出該符號下兩個元素進行該符號操作

最後一步沒有下個元素讀取,說明讀取完畢,將棧底元素全部彈出輸出。確保棧空。字尾表示式是不需要進行計算符號優先順序考慮的。

想必應該已經對逆波蘭演算法有一定了解,留乙個思考題。冪運算如何進行字尾表示式?

總結,逆波蘭演算法是對於計算機而言處理二元運算的一種非常巧妙的方式。理解乙個中綴表示式到字尾表示式的轉換過程,就會有一定程度的理解。

資料結構 逆波蘭式

很久沒有關注演算法和資料結構,大部分知識都已經忘記了 是時間好好回爐一下了,說實話幹讀資料機構這本書還是挺枯燥而且這本書原理性比較多,有一定的難度。這不剛看到逆波蘭式廢了好大勁才搞懂,老了。逆波蘭式 reverse polish notation,rpn,或逆波蘭記法 也叫字尾表示式 將運算子寫在運...

資料結構與演算法分析 之 資料結構和演算法概述

官方解釋 資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。大白話 資料結構就是把資料元素按照一定的關係組織起來的集合,用來組織和儲存資料 傳統上,我們可以把資料結構分為邏輯結構和物理結構兩大類。邏輯結構分類 邏輯結構是從具體問題中抽象出來的模型,是抽...

資料結構與演算法之儲存分析

陣列儲存方式的分析 優點 通過下標方式訪問元素,速度快。對於有序陣列,還可使用二分查詢提高檢索速度。缺點 如果要檢索具體某個值,或者插入值 按一定順序 會整體移動,效率較低 鏈式儲存方式的分析 優點 在一定程度上對陣列儲存方式有優化 比如 插入乙個數值節點,只需要將插入節點,鏈結到鍊錶中即可,刪除效...