演算法學習筆記

來源:互聯網
上載者:User

標籤: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)
  • 散列函數
  • 碰撞解決
字串演算法
  • 排序
  • 尋找
    • BF演算法
    • KMP演算法
    • BM演算法
  • Regex
  • 資料壓縮
圖的演算法
  • 圖的儲存結構和基本操作(建立,遍曆,刪除節點,添加節點)
  • 最小產生樹
  • 拓撲排序
  • 關鍵路徑
  • 最短路徑: 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
來源:慕課網

演算法學習筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.