資料結構和演算法的圖解和實現

pubian877發表於2020-07-14

  為什麼要學習資料結構和演算法

  很多人在實際工作中,並不會直接實現資料結構和寫一個演算法來解決實際問題,因為這些都在類庫或者框架內部實現了,只需要呼叫類庫或框架提供的api。這些api極大的幫助了我們快速實現業務需求,開發出符合要求的產品。這樣的api呼叫對程式猿(媛)來說不是那麼的困難,導致現在越來越多的人開始步入這個高薪行業。做開發的人越來越多,為了提高門檻,很多企業開始注重候選人的基本功那就是資料結構和演算法。

  我們平時所用的技術都是基於資料結構和演算法在上層做了封裝,想要用好這些技術就得去了解,去熟悉這些技術所用的資料結構或者演算法。當程式呼叫出錯時,熟悉資料結構和演算法對於閱讀底層的原始碼會有很大的幫助。程式的效能瓶頸往往都跟資料結構和演算法有關係的,每種資料結構有各種的優缺點,每種演算法有不同的時間複雜度和空間複雜度,當你瞭解這些,你就能夠使用合適的資料結構和演算法讓程式獲得更優越的效能。

  有些演算法是用來解決一類問題,瞭解演算法的思想,就能使用演算法來解決同類問題。更高階一點講,如果你對現有的技術不滿意,就可以自己在資料結構和演算法的基礎上加以改進。

  什麼是資料結構

  資料結構是計算機儲存和組織資料的方式。資料結構是用來儲存資料的集合。當資料以某種特定的關係聯絡起來,就需要選擇對應的資料結構來儲存,選擇不同的資料結構對執行速度和儲存效率都會有影響。

  什麼是演算法

  演算法是解決問題的程式碼,是描述解決問題的過程。對於符合規定的輸入,獲得符合預期的輸出。使用不同的演算法解決相同的問題所花費的時間是不同的。空間複雜度和時間複雜度是用來衡量一個演算法的優劣。

  資料結構和演算法的關係

  資料結構是底層,為演算法提供服務。演算法總是要依賴種資料結構來解決問題。簡而言之,程式就等於資料結構+演算法。

  資料結構分類

  資料結構包括線性結構和非線性結構。

  線性結構

  線性結構是最常用的資料結構,特點是資料元素之間存在一對一的關係。線性結構有兩種儲存方式,一種是順序儲存叫做順序表,其儲存的元素在記憶體中是連續的,另外一種叫做連結串列,其儲存的元素不一定是連續的,元素節點中存放資料元素以及相鄰元素的地址資訊。

  常見的線性結構有陣列、佇列、連結串列和棧。

  非線性結構

  非線性結構的一個結點元素可能有多個直接前驅和多個直接後繼結點。非線性結構包括二維陣列、多維陣列、廣義表、樹和圖。

  常用資料結構

  稀疏陣列

  佇列

  棧

  連結串列

  雜湊表

  樹

  圖

  演算法

  遞迴

  迷宮回溯

  八皇后

  排序

  氣泡排序

  選擇排序

  插入排序

  快速排序

  希爾排序

  歸併排序

  基數排序

  堆排序

  查詢

  線性查詢

  二分法查詢

  二分法查詢(非遞迴)

  插值查詢

  斐波那契查詢

  分治演算法

  漢諾塔

  KMP演算法

  暴力匹配

  KMP匹配

  貪心演算法

  普里姆(Prim)演算法

  克魯斯卡爾演算法

  馬踏棋盤演算法


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69976867/viewspace-2704293/,如需轉載,請註明出處,否則將追究法律責任。

相關文章