當初資料結構與演演算法這樣學,現在也不至於這樣!!!

2021-04-24 12:00:04

學習資料結構與演演算法一個很重要的前提,就是至少熟練掌握一門程式語言。至於是那種語言就無關緊要了,C 語言、C++、Java、Python 等語言都可以。因為無論是資料結構還是演演算法,它教會我們的是解決問題的思想,並不掛靠某一門具體的程式語言。換句話說,在掌握任何一門程式語言的基礎上,都可以學習資料結構和演演算法。

資料結構與演演算法的關係

大量資料結構教學中都將資料結構的知識和演演算法摻雜起來講,使很多初學者認為資料結構就是在講演演算法,這樣理解是不準確的。如果把程式理解為:

程式=資料+演演算法

那麼資料結構用於解決資料儲存問題,而演演算法用於處理和分析資料,輸出結果。

在解決問題的過程中,資料結構要配合演演算法選擇最優的儲存結構來儲存資料,而演演算法也要結合資料儲存的特點,用最優的策略來分析並處理資料,可以最高效地解決問題。

資料結構與演演算法的重要性

假設需要從眾多資料中查詢出符合要求的元素,美學沒學習資料結構的話,只能藉助陣列這種簡單的儲存結構來實現,而通過學習資料結構,解決此類問題既可以通過構建二叉排序樹、平衡二元樹、紅黑樹、B+/B- 樹甚至藉助雜湊表解決。不同資料結構選擇往往直接影響程式效能好壞。

掌握了資料結構與演演算法,看待問題的深度、解決問題的角度會大有不同,對於個人邏輯思維的提升,也是質的飛躍。與程式語言不同,無論是 c語言、Java、Python、C++、PHP 還是其他程式語言,無時無刻不在更新迭代,而資料結構卻永遠不會過時,毋庸置疑,資料結構是每個程式設計師必須掌握的基本功

要想學好資料結構,不僅要求學員具備良好的程式設計基礎,還需具有較強的邏輯分析能力、理解能力和一定的空間想象能力,可以這麼說,能玩轉資料結構的人,其綜合實力往往都不差。很多大的網際網路公司,更看重的往往不是你精通多少種程式語言,而是綜合能力,也就是解決問題的能力。可見,資料結構與演演算法是能力高低的分水嶺,是大廠選拔人才的重要標準

學習資料結構的三部曲

比如《演演算法圖解》、《我的第一本演演算法書》、《啊哈演演算法》、《大話資料結構》、《漫畫演演算法-小灰的演演算法之旅》、《演演算法(第4版)》、《資料結構與演演算法分析》、《挑戰程式設計競賽》以及《演演算法導論》等等。

如果要比較系統地學習資料結構的話,推薦看《大話資料結構》、《演演算法(第4版)》和《資料結構與演演算法分析》。

大話資料結

 

演演算法(第4版)

 

據結構與演演算法分析

 

如果剛接觸資料結構的話,可以從《演演算法圖解》、《我的第一本演演算法書》入手。

演演算法圖解

 

我的第一本演演算法書

視訊

1. 郝斌資料結構

雖然比較老,但是講的比較詳細,容易理解,對初學者非常友好。

https://www.bilibili.com/video/BV1Ut411a7rN?from=search&seid=14411767501116137153

2. 資料結構-浙江大學

課程是由陳越與何欽銘共同錄製,b站與慕課網都有,慕課網比較清晰一些

https://www.icourse163.org/course/ZJU-93001?from=searchPage

https://www.bilibili.com/video/BV1JW411i731?p=1

3. 資料結構與演演算法基礎

課程由青島大學王卓老師錄製,非常適合考研,講的題比較多。

https://www.bilibili.com/video/BV1nJ411V7bd?p=1

多動手

動手去做,動手去做,動手去做。重要的話說三遍。

動手包括擼碼,還包括"多畫"

要邊學習邊畫圖。因為對於資料結構中的儲存結構來說,尤其是樹結構和圖結構,儲存結構確實比較複雜,僅靠空間想象難免會有披露,而通過親手畫圖往往能避免很多「坑」,後面關於資料結構與演演算法的文章中,我也會加入一些動圖。

把資料結構圖形化,視覺化。在直覺上感受一個資料結構是什麼樣子的。使用它是什麼感覺,抽象上和具體實現上是什麼樣子的。這就是最重要的事情。並且無論是對於簡單的佇列、棧還是平衡樹都很重要而且有效。把資料結構畫出來,在你的腦袋瓜裡面就能想象出來,總之,你需要做的就是,直觀的去了解這些資料結構

在學習某些演演算法時,也可以藉助畫圖來加深自己的理解。可以邊閱讀程式碼邊畫圖,這樣可以更快理清程式碼的實現邏輯。

在通過「多畫」實現理解儲存結構和實現邏輯的基礎上,初學者還要「多擼碼」編寫實現程式碼。對於某一種儲存結構或者演演算法,沒有 3 遍以上自己獨立的實現過程,是很難做到融會貫通的。

另外,可以在leetcode和牛客網多刷題。

 

思維導圖

來源:https://blog.csdn.net/ityqing/article/details/82838524

分享一本由谷歌大佬所撰的《LeetCode演演算法題解+程式碼》

裡面包含了詳細的題目分析+詳細程式碼答案且已開源,可作為刷題的輔助和參考,格式為PDF,方便閱讀,也方便列印出來學習。

需要上面PDF檔案,在公眾號(c語言與cpp程式設計)回覆 「刷題」 兩個字自取。

為防止不加原址的轉載,特註明原作出處https://github.com/soulmachine/leetcode

微信搜一搜「C語言與CPP程式設計」,關注後送海量資料,最近github發現一寶藏倉庫,裡面有很多資源,分享給大家,地址:https://github.com/tangtangcoding/C-C-