由極客時間出品的《資料結構與演算法之美》由前Google工程師王爭所做,在Google從事翻譯系統開發,專研演算法數十年,這是為工程師量身打造的資料結構與演算法私教課。
資料結構與演算法之美專欄介紹
踏上了程式設計之路,也就意味著你選擇了一種終身學習的生活方式。每一個程式設計師都要練就十八般武藝,而掌握資料結構與演算法就像修煉了九陽神功。換句話說,掌握了資料結構與演算法,你的內功修煉速度就會有質的飛躍。
無論你是從事業務開發,想要評估程式碼效能和資源消耗;還是從事架構設計,想要優化設計模式;或者想要快速玩轉熱門技術,比如人工智慧、區塊鏈,都要先搞定資料結構與演算法。因為,任憑新技術如何變化,只要掌握了這些電腦科學的核心“招式”,你就可以見招拆招,始終立於“不敗之地”。
那怎樣才能真正掌握資料結構與演算法呢?是把常用的資料結構與演算法背得滾瓜爛熟嗎?即便如此,面對現實世界的千變萬化,你也不太可能照搬某個演算法解決即將遇到的下一個問題。因此,就像學習設計模式、架構模式一樣,學習資料結構與演算法的關鍵,在於掌握其中的思想和精髓,學會解決實際問題的方法。
資料結構與演算法之美作者介紹
王爭,前Google工程師,從事Google翻譯相關係統的開發,深入研究演算法十餘年。現任某金融公司核心系統資深系統架構師,負責公司核心業務的架構設計和開發。
他將採用最適合工程師的學習方式,不拘泥於某一特定程式語言,從實際開發場景出發,由淺入深教你學習資料結構與演算法的方法,幫你搞懂基本概念和核心理論,深入理解演算法精髓,幫你提升使用資料結構和演算法思維解決問題的能力。
特別提醒:專欄內容相關程式碼,均隨更新進度上傳至GitHub,點選這裡,即可檢視。
資料結構與演算法之美專欄模組
專欄共56期,分為4個由淺入深的模組。
入門篇
為什麼要學習資料結構與演算法?資料結構與演算法該怎麼學?學習的重點又是什麼?這一模組將為你指明資料結構與演算法的學習路徑;並著重介紹貫穿整個專欄學習的重要概念:時間複雜度和空間複雜度,為後面的學習打好基礎。
基礎篇
將介紹最常見、最重要的資料結構與演算法。每種都從“來歷”“特點”“適合解決的問題”“實際的應用場景”出發,進行詳細介紹;並配有清晰易懂的手繪圖解,由淺入深進行講述;還適時總結一些實用“寶典”,教你解決真實開發問題的思路和方法。
高階篇
將從概念和應用的角度,深入剖析一些稍複雜的資料結構與演算法,推演海量資料下的演算法問題解決過程;幫你更加深入理解演算法精髓,開拓視野,訓練邏輯;真正帶你升級演算法思維,修煉深厚的程式設計內功。
實戰篇
將通過實戰案例串講前面講到的資料結構和演算法;並拿一些開源專案和框架,剖析它們背後的資料結構和演算法;並帶你用學過的內容實現一個短網址系統;深化對概念和應用的理解,靈活使用資料結構和演算法。
資料結構與演算法之美專欄詳細目錄
1)作為一名軟體工程師,為什麼要學習資料結構和演算法?
2)如何抓住重點,系統高效地學習資料結構和演算法?
3)複雜度分析(上):如何分析演算法的執行效率和資源消耗?
4)複雜度分析(下):淺析最好、最壞、平均、均攤時間複雜度
5)陣列:為什麼很多程式語言中陣列都從0開始編號?
6)連結串列(上):如何實現LRU快取淘汰演算法?
7)連結串列(下):如何輕鬆寫出正確的連結串列程式碼?
8)棧:如何實現瀏覽器的前進和後退功能?
9)佇列:如何實現執行緒池等有限資源池的請求排隊功能?
10)遞迴:如何用三行程式碼找到“最終推薦人”?
11)排序(上):為什麼插入排序比氣泡排序更受歡迎?
12)排序(下):如何用怏排思想在〇(n)內查詢第K大元素?
13)線性排序:如何根據年齡給100萬使用者資料排序?
14)排序優化:如何實現一個通用的、高效能的排序函式?
15)二分查詢(上):如何用最省記憶體的方式實現怏速查詢功能?
16)二分查詢(下):如何怏速定位IP對應的省份地址?
17)眺表:為什麼Redis—定要用跳錶實現有序集合?
18)雜湊表(上):Word文件的單詞拼寫檢查功能是如何實現的?
19)雜湊表(中):如何打造一個工業級水平的雜湊表?
20)雜湊表(下):為什麼經常把雜湊表和連結串列放在一起使用?
21)雜湊演算法(上):如何防止資料庠中的使用者資訊被脫庫?
22)雜湊演算法(下):雜湊演算法在分散式系統中有哪些應用?
23)二叉樹基礎(上):什麼樣的二又樹適合用陣列來儲存?
24)二叉樹基礎(下):有了高效的雜湊表,為什麼還用二叉樹?
25)紅黑樹(上):為什麼工程中都喜歡用紅黑樹這種平衡二叉樹?
26)函紅黒樹(下):掌握這些技巧,你也可以輕鬆實現一個紅黒樹
27)遞迴樹:如何藉助樹來輕鬆分析遞迴演算法的時間複雜度?
28)堆和堆排序:為什麼說堆排序沒有怏速排序怏?
29)堆的應用:如何尋找TOP 10熱門搜尋關鍵詞?
30)圖的表示:如何儲存微博、微信等社交網路中的好友關係?
31)深度和廣度優先搜尋:如何找出社交網路中的三度好友關係?
32)字串匹配(上):如何藉助雜湊演算法實現高效字串匹配?
33)字串匹配(中):如何實現文字編輯器中的查詢功能?
34)字串匹配(下):如何藉助BM演算法理解KMP演算法?
35)Trie樹:如何實現搜尋引擎的搜尋關鍵詞提示功能?
36)AC自動機:如何用多模式串匹配實現敏感詞過濾功能?
37)貪心演算法:如何用貪心演算法實現Huffman壓縮編碼?
38)分治演算法:談一談大規模計算框架MapReduce中的分治思想
39)回溯演算法:從電影《蝴蝶效應》中學習回溯演算法的核心思想
40)初識動態規劃:如何巧妙解決“雙十購物時的湊單問題?
41)動態規劃理論:一篇文章帯你搞憧最優子結構、無後效性和重複子問題
42)動態規劃實戰:如何實現搜尋引擎中的拼寫糾錯功能?
43)拓撲排序:如何確定程式碼原始檔的編譯依賴關係?
44)最短路徑:地圖軟體是如何計算出最優出行路徑的?
45)點陣圖:如何實現網頁爬蟲中的URL去重功能?
46)統計問題:如何利用樸素貝葉斯演算法過濾垃圾簡訊?
47)向量空間:如何實現一個簡單的音樂推薦系統?
48)B+樹:MySQL資料庫索引是如何實現的?
49)搜尋:如何用A*搜尋演算法實現遊戲中的尋路功能?
50)索引:如何在海量資料中快速查詢某個資料?
51)並行演算法:如何利用並行處理提高演算法的執行效率?
52)演算法實戰(一):剖析Redis常用的資料型別對應的資料結構
53)演算法實戰(二):剖析搜尋引擎背後的經典資料結構和演算法
54)演算法實戰(三):剖析高效能佇列Dismptor背後的資料結構和演算法
55)演算法實戰(四):剖析微服務介面鑑許可權流背後的資料結構和演算法
56)演算法實戰(五):如何用學過的資料結構和演算法實現一個短網址系統?
訂閱須知:
本專欄適合有資料結構基礎的IT從業者和大學生
專欄出品方:極客時間。訂閱後可在極客時間APP、極客時間小程式學習。
學習形式為圖文 + 音訊,共計 56 期,定價99元。
掃我提供的二維碼報名我們還再各得12元。報名後記得加我微信:dismissmwp 備註:返現。我好給你返12元錢哈哈。也可以直接複製下面連結報名:http://gk.link/a/102Dh
極客時間更多專欄:
我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。
***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***