標籤:offer bit 選擇 etc pv原語 二元堆積 分治演算法 cti hash
對於一個軟體人員來說,演算法和資料結構是無法逃避的,越是逃避說明越是需要繼續學習和鞏固、加深。轉載一篇github上有關演算法的文章,以便於進行繼續學習和理解。當然並不是說非得全部掌握所有演算法至少達到需要的時候會找,找到了會使,使完了能明白是什麼東西才能更好的進行coding。這篇文章是有關C的 下次再弄個Java語言的演算法部分。學無止境嘛,不能光看java也要學習學習C學習方法
- 把所有經典演算法寫一遍
- 看演算法有關源碼
- 加入演算法學習社區,相互鼓勵學習
- 看經典書籍
- 刷題
原文地址:https://github.com/nonstriater/Learn-Algorithms 基本資料結構和演算法
這些演算法全部自己敲一遍:
鏈表
二叉樹
- 二叉樹
- 二叉尋找樹
- 伸展樹(splay tree 分裂樹)
- 平衡二叉樹AVL
- 紅/黑樹狀結構
- B樹,B+,B*
- R樹
- Trie樹(首碼樹)
- 尾碼樹
- 最優二叉樹(赫夫曼樹)
- 二元堆積 (大根堆,小根堆)
- 二項樹
- 二項堆
- 斐波那契堆(Fibonacci Heap)
雜湊表/散列表 (Hash Table)
字串演算法
圖的演算法
- 圖的儲存結構和基本操作(建立,遍曆,刪除節點,添加節點)
- 最小產生樹
- 拓撲排序
- 關鍵路徑
- 最短路徑: 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塊一本
參考連結和學習網站July 部落格
《數學建模十大經典演算法》
《資料採礦領域十大經典演算法》
《十道海量資料處理面試題》
《數位影像處理領域的二十四個經典演算法》
《精選微軟等公司經典的演算法面試100題》
The-Art-Of-Programming-By-July
微軟面試100題
程式員編程藝術
基本演算法示範
http://sjjg.js.zwu.edu.cn/SFXX/sf1/sfys.html
http://www.cs.usfca.edu/~galles/visualization/Algorithms.html
編程網站
http://leetcode.com/
http://openjudge.cn/ 開放線上程式評測平台,可以床架自己的OJ小組
http://ac.jobdu.com/index.php 九度OJ
這有個ACM訓練方案 http://www.java3z.com/cwbwebhome/article/article19/res041.html
其它
進階資料結構和演算法 北大教授張銘老師在coursera上的課程。完成這門課之時,你將掌握多維陣列、廣義表、Trie樹、AVL樹、伸展樹等進階資料結構,並結合內排序、外排序、檢索、索引有關的演算法,高效地解決現實生活中一些比較複雜的應用問題。當然coursera上也還有很多其它演算法方面的視頻課程。
演算法設計與分析 Design and Analysis of Algorithms 由北大教授Wanling Qu在coursera講授的一門演算法課程。首先介紹一些與演算法有關的基礎知識,然後闡述經典的演算法設計思想和分析技術,主要涉及的演算法設計技術是:分治策略、動態規劃、貪進法、回溯與分支限界等。每個視頻都配有相應的講義(pdf檔案)以便閱讀和複習。
IT程式獅
連結:http://www.imooc.com/article/3669?from=itblog
來源:慕課網
演算法學習筆記