算法學習筆記

對於一個軟件人員來講,算法和數據結構是沒法逃避的,越是逃避說明越是須要繼續學習和鞏固、加深。轉載一篇github上有關算法的文章,以便於進行繼續學習和理解。固然並非說非得所有掌握全部算法至少達到須要的時候會找,找到了會使,使完了能明白是什麼東西才能更好的進行coding。這篇文章是有關C的 下次再弄個Java語言的算法部分。學無止境嘛,不能光看java也要學習學習C
學習方法
  • 把全部經典算法寫一遍
  • 看算法有關源碼
  • 加入算法學習社區,相互鼓勵學習
  • 看經典書籍
  • 刷題
原文地址:https://github.com/nonstriater/Learn-Algorithms
 
基本數據結構和算法

這些算法所有本身敲一遍:php

鏈表

  • 鏈表
  • 雙向鏈表

二叉樹

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

哈希表/散列表 (Hash Table)

  • 散列函數
  • 碰撞解決

字符串算法

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

圖的算法

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

排序算法

交換排序算法html

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

線性排序算法java

  • 桶排序

查找算法

  • 順序表查找:順序查找
  • 有序表查找:二分查找
  • 分塊查找: 塊內無序,塊之間有序;能夠先二分查找定位到塊,而後再到中順序查找
  • 動態查找: 二叉排序樹,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》
《編程之美》
《結構之法:面試和算法心得》
《算法謎題》 都是思惟題 git

基礎

《編程珠璣》Programming Pearls
《編程珠璣(續)》
《數據結構與算法分析》
《Algorithms》 這本近千頁的書只有6章,其中四章分別是排序,查找,圖,字符串,足見介紹細緻 程序員

算法設計

《算法設計與分析基礎》
《算法引論》 告訴你如何創造算法 斷貨
《Algorithm Design Manual》算法設計手冊 紅皮書 github

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

《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 來源:慕課網
相關文章
相關標籤/搜索