算法學習筆記

算法虐我千百遍,我待算法如初戀

這裡的內容是我學習算法過程的一些記錄,希望能一直堅持下去。

學習方法

  • 把所有經典算法寫一遍
  • 看算法有關源碼
  • 加入算法學習社區,相互鼓勵學習
  • 看經典書籍
  • 刷題

基本數據結構和算法

這些算法全部自己敲一遍:

鏈表

  • 鏈表
  • 雙向鏈表

二叉樹

  • 二叉樹
  • 二叉查找樹
  • 伸展樹(splay tree 分裂樹)
  • 平衡二叉樹AVL
  • 紅黑樹
  • B樹,B+,B*
  • R樹
  • Trie樹(前綴樹)
  • 後綴樹
  • 最優二叉樹(赫夫曼樹)
  • 二叉堆 (大根堆,小根堆)
  • 二項樹
  • 二項堆
  • 斐波那契堆(Fibonacci Heap)

哈希表/散列表 (Hash Table)

  • 散列函數
  • 碰撞解決

字符串算法

  • 排序
  • 查找
  • BF算法
  • KMP算法
  • BM算法
  • 正則表達式
  • 數據壓縮

圖的算法

  • 圖的存儲結構和基本操作(建立,遍歷,刪除節點,添加節點)
  • 最小生成樹
  • 拓撲排序
  • 關鍵路徑
  • 最短路徑: Floyd,Dijkstra,bellman-ford,spfa

排序算法

交換排序算法

  • 冒泡排序
  • 插入排序
  • 選擇排序
  • 希爾排序
  • 快排
  • 歸併排序
  • 堆排序

線性排序算法

  • 桶排序

查找算法

  • 順序表查找:順序查找
  • 有序表查找:二分查找
  • 分塊查找: 塊內無序,塊之間有序;可以先二分查找定位到塊,然後再到塊中順序查找
  • 動態查找: 二叉排序樹,AVL樹,B- ,B+ (這裡之所以叫 動態查找表,是因為表結構是查找的過程中動態生成的)
  • 哈希表: O(1)

15個經典基礎算法

  • Hash
  • 快速排序
  • 快遞選擇SELECT
  • BFS/DFS (廣度/深度優先遍歷)
  • 紅黑樹 (一種自平衡的二叉查找樹)
  • KMP 字符串匹配算法
  • DP (動態規劃 dynamic programming)
  • A*尋路算法: 求解最短路徑
  • Dijkstra:最短路徑算法 (八卦下:Dijkstra是荷蘭的計算機科學家,提出”信號量和PV原語“,"解決哲學家就餐問題",”死鎖“也是它提出來的)
  • 遺傳算法
  • 啟發式搜索
  • 圖像特徵提取之SIFT算法
  • 傅立葉變換
  • SPFA(shortest path faster algorithm) 單元最短路徑算法

海量數據處理

  • Hash映射/分而治之
  • Bitmap
  • Bloom filter(布隆過濾器)
  • Trie樹
  • 數據庫索引
  • 倒排索引(Inverted Index)
  • 雙層桶劃分
  • 外排序
  • simhash算法
  • 分佈處理之Mapreduce

算法設計思想

  • 迭代法
  • 窮舉搜索法
  • 遞推法
  • 動態規劃
  • 貪心算法
  • 回溯
  • 分治算法

刷題必備

《劍指offer》

《編程之美》

《結構之法:面試和算法心得》

《算法謎題》 都是思維題

基礎

《編程珠璣》Programming Pearls

《編程珠璣(續)》

《數據結構與算法分析》

《Algorithms》 這本近千頁的書只有6章,其中四章分別是排序,查找,圖,字符串,足見介紹細緻

算法設計

《算法設計與分析基礎》

《算法引論》 告訴你如何創造算法 斷貨

《Algorithm Design Manual》算法設計手冊 紅皮書

《算法導論》 是一本對算法介紹比較全面的經典書籍

《Algorithms on Strings,Trees and Sequences》

《Advanced Data Structures》 各種詭異高級的數據結構和算法 如元胞自動機、斐波納契堆、線段樹 600塊

延伸閱讀

《深入理解計算機系統》

《TCP/IP詳解三卷》

《UNIX網絡編程二卷》

《UNIX環境高級編程:第2版》

《The practice of programming》 Brian Kernighan和Rob Pike

《writing efficient programs》 優化

《The science of programming》 證明代碼段的正確性 800塊一本

算法學習筆記

鏈接:http://www.imooc.com/article/3669


分享到:


相關文章: