歷時三年,寫的一本資料結構與演算法pdf,開源了!

bigsai發表於2023-11-12

前言

大家好,我是bigsai,很早就在寫部落格,將文章整理成了一個pdf,並且開源到github上!

自己寫東西斷斷續續也不少時間了,也寫了不少東西(雖然是偏向小白),這個其實花費的時間還是比較多的,這次的話主要將資料結構與演算法中一些文章整理出來,初步整理成一版pdf,先分享給大家。

因為在整理pdf方面沒啥經驗,目前還是md直接匯出的pdf的,看了下有些部分程式碼太長太佔頁面,有些部分圖片太長也很佔地方,有部分文章還嘗試不同風格顯得不那麼條理,有些地方頁面突然分割也很影響視覺體驗……

雖然有很多缺點和問題,這些地方後面也在想辦法考慮一點點最佳化,也歡迎大夥提出寶貴的意見!當然這個倉庫也是開源的,有興趣一起維護的可以維護。

更新會同步到Github倉庫中,也會告知大家。近期會將以前寫的其他資料結構演算法部分(未最佳化)最佳化更新上去。

github地址https://github.com/javasmall/bigsai-algorithm

主要內容

  1. 理論基礎搭建

    • 緒論基礎知識:理解資料結構的相關概念,熟悉時間複雜度和空間複雜度。
    • 寫給小白硬核遞迴:透過解決經典問題,深入理解遞迴,掌握記憶化遞迴的妙用。
  2. 線性結構的掌握

    • 圖解線性表:手寫順序表和連結串列,理解帶頭結點和不帶頭結點連結串列的實現區別。
    • 圖解雙連結串列:手寫雙連結串列,考慮好節點直接聯絡,特別是考研重點。
  3. 棧與佇列的熟練使用

    • :掌握後進先出規則,實現上用順序表和連結串列考慮區別。
    • 佇列:理解先進先出規則,實現上使用迴圈陣列和連結串列分別實現。
  4. 更高階的線性結構

    • 跳錶:瞭解跳錶的增刪改查原理和流程,拓寬對連結串列的認識。

      image-20231112122201531

    • 約瑟夫環問題:透過連結串列法、List模擬、公式法逐步深入這個問題。

  5. 樹的深入學習

    • 二叉樹層序遍歷:學會使用佇列進行層序遍歷,解決二叉樹之字形遍歷。
    • 二叉樹前中後遍歷:熟練掌握非遞迴方式遍歷,建立對樹結構的全面理解。
    • 二叉搜尋(查詢)樹:學會查詢方式和刪除節點邏輯。
    • 二叉平衡(AVL)樹:瞭解平衡二叉樹的旋轉方式,以及不同平衡方式的應用。
  6. 其他重要資料結構

    • 哈夫曼樹:理解哈夫曼樹的weight計算方式和哈夫曼編碼。
    • 字典(Trie)樹:手寫字典樹,熟悉其應用場景和優勢。
    • 優先佇列:瞭解藉助堆的執行原理。
    • 並查集(不相交集合):手寫並查集,理解路徑壓縮的優勢。
  7. 問題解決方法的學習

    • 回溯演算法:透過解經典問題如八皇后問題,深刻理解回溯思想。
    • 分治演算法:學會先分後合併,解決經典問題如二分搜尋、快排、歸併排序、最近點對等。
    • 搜尋演算法:深度優先搜尋、廣度優先搜尋,解決問題如藍橋杯,提高解決實際問題的能力。
    • 拓撲排序:理解圖論演算法,得到一個前後的順序序列。
    • Dijkstra演算法:瞭解圖論單源最短路徑,佇列+貪心實現。
    • Floyd演算法:瞭解圖論多源最短路徑,程式碼簡短但需要深刻理解。
    • 最小生成樹演算法:Prim和Kruskal,瞭解不同貪心策略的應用。
  8. 位運算與數論演算法

    • 位運算:介紹幾種位運算,解決大部分經典位運算問題。
    • 求素數:掌握素數篩和尤拉篩的應用。
    • 快速冪:數論演算法,掌握非遞迴、遞迴寫法,瞭解矩陣快速冪。
  9. 大數運算

    • 大數加減乘除:手寫大數運算,瞭解大數除法的思想。

      image-20231112121702785

  10. 十大排序演算法

    • 氣泡排序、快速排序:瞭解交換類排序的原理和應用。
    • 插入排序、希爾排序:理解插入類排序的方法和優勢。
    • 歸併排序:學會歸併類排序的實現。
    • 簡單選擇排序、堆排序:掌握選擇類排序的原理。
    • 桶排序、計數排序、基數排序:瞭解桶類排序的應用場景和實現。
    • 雙軸快排:最佳化快排的方法,深入理解排序演算法的差異。

推薦資料

  1. 書籍
    • 《演算法導論》:經典之作,系統全面地介紹了演算法和資料結構。
    • 《資料結構與演算法分析》:作者Mark Allen Weiss,深入淺出地講解資料結構與演算法。
    • 《劍指Offer》:針對面試演算法題的詳盡解析,適合入門和麵試準備。
  2. 線上教程
    • LeetCode:刷題神器

github地址https://github.com/javasmall/bigsai-algorithm

持續更新中,歡迎star支援 !

相關文章