數據結構與算法之美(零):學前準備

筆者作為一名非科班出身的程序員,想系統地補充“數據結構與算法”這一塊知識,入了極客時間的專欄《數據結構與算法之美》,希望能以筆記的形式總結、分享所學,更以督促學習。

本章內容源于對專欄以下章節的學習筆記:

經驗篇

作者開篇介紹了兩個和數據結構與算法有關的例子:

  • 1.在作者的學生時代,為了幫他提高編程能力,師兄給了他一本《算法導論》,使他對算法開始著迷。通過對數據結構與算法的研究,編程能力有了質的飛躍。他認為那是他人生為數不多的轉折點之一。
  • 2.一位在騰訊工作10年的T4大牛,跳槽去區塊鏈領域,用了不到半年時間,就把區塊鏈的整個技術脈絡摸清楚了。他曾經說,像區塊鏈、人工智能這些看似很新的技術,其實一點兒都不“新”。最初學編程的時候,他就把那些基礎的知識都學透了。當面臨行業變動、新技術更迭的時候,他不斷發現,那些所謂的新技術,核心和本質的東西其實就是當初學的那些知識。

基礎知識就像是一座大樓的地基,它決定了我們的技術高度。而要想快速做出點事情,前提條件一定是基礎能力過硬,“內功”要到位。

我們都知道基礎無外乎就是操作系統、計算機網絡、編譯原理等,當然還有數據結構和算法。

人生路上,我們會遇到很多的坎。跨過去,你就可以成長,跨不過去就是困難和停滯。而在后面很長的一段時間里,你都需要為這個困難買單。對于我們技術人來說,更是這樣。既然數據結構和算法這個坎,我們總歸是要跨過去,為什么不是現在呢?

目的篇

我們為什么要學習數據結構和算法?

1.通關大廠面試

  • 就校招而言,沒有實際項目經驗,公司只能考察基礎知識是否牢固。
  • 就社招而言,越是厲害的公司越重視考察數據結構與算法等基礎知識,相對短期能力,公司更看中你的長期潛力。

擺正心態:我們學任何知識都是為了“用”的,是為了解決實際工作問題。

2.避免只會業務操作

在基礎框架中,一般都柔和了很多基礎數據結構和算法的設計思想。掌握數據結構和算法,不管對于閱讀框架源碼,還是理解其背后的設計思想,都是非常有用的。

3.開源框架的目標

相同原理的框架,為什么有的人寫的就可以在GitHub上被很多人使用,甚至被官方收錄?歸根結底在于細節,比如算法的優化、數據存儲效率、內存的優化等等。

4.對編程的追求

不想只會寫湊合的代碼,對編程有所追求。性能好壞起碼是評判代碼非常重要的一個標準。

小結:學習數據結構和算法,并不是為了死記硬背幾個知識點。目的是建立時間復雜度、空間復雜度意識,寫出高質量的代碼,能夠設計基礎架構,提升編程技能,訓練邏輯思維,積攢人生經驗,以此獲得工作回報,實現你的價值,完善你的人生。掌握了數據結構與算法,你看待問題的深度,解決問題的角度就會完全不一樣。

方法篇

如何系統高效地學習數據結構與算法?

1.數據結構與算法的定義

從廣義上講,數據結構就是指一組數據的存儲結構。算法就是操作數據的一組方法。

2.數據結構與算法的關系

數據結構和算法是相輔相成的。數據結構是為算法服務的,算法要作用在特定的數據結構之上。

3.學習認知要求

搞清楚:是什么、為什么、怎么做?

4.學習重點

  • 首先要掌握一個數據結構與算法中最重要的概念——復雜度分析;
  • 10個數據結構:數組、鏈表、棧、隊列、散列表、二叉樹、堆、跳表、圖、Trie 樹;
  • 10個算法:遞歸、排序、二分查找、搜索、哈希算法、貪心算法、分治算法、回溯算法、動態規劃、字符串匹配算法;
  • 學習它們的來歷自身的特點適合解決的問題以及實際的應用場景

5.學習技巧

  • 邊學邊練,適度刷題
  • 多問、多思考、多互動
  • 打怪升級學習法:留言、筆記、心得、找錯
  • 知識需要沉淀,不要想試圖一下子掌握所有:學習知識的過程是反復迭代、不斷沉淀的過程,書讀百遍其義自見
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容