ACM競賽學習指南(算法工程師成長計劃)

算法工程師成長計劃

 

近年來,算法行業異常火爆,算法工程師年薪一般20萬~100 萬。越來越多的人學習算法,甚至很多非專業的人也參加培訓或者自學,想轉到算法行業。儘管如此,算法工程師仍然面臨100萬的人才缺口。缺人、急需,算法工程師成爲衆多企業獵頭爭搶的對象。

計算機的終極是人工智能,而人工智能的核心是算法,算法已經滲透到了包括互聯網、商業、金融業、航空、軍事等各個社會領域。可以說,算法正在改變着這個世界。

下面說說如何成爲一個算法工程師,萬丈高樓平地起,儘管招聘啓事的算法工程師都要求會機器學習,或數據挖掘,推薦算法,圖像識別等,但剛入門者,還需要先從基礎算法學起,寬基礎,精技術。

大學期間必須要學好的課程:C/C++兩種語言(或JAVA)、高等數學、線性代數、數據結構、離散數學、數據庫原理、操作系統原理、計算機組成原理、人工智能、編譯原理、算法設計與分析。

  • 大一上學期:
  1. C語言基礎語法必須全部學會,提前完成C語言課程設計。
  2. 簡單數學題:求最大公約數、篩法求素數、康託展開、同餘定理、次方求模等。
  3. 計算機課初步:三角形面積,三點順序等等。
  4. 學會計算簡單程序的時間複雜度和空間複雜度。
  5. 二分查找、貪心算法經典算法。
  6. 簡單的排序算法:冒泡排序法、插入排序法。
  7. 高等數學。
  8. 操作系統應用:DOS命令,學會Windows系統的一些小知識,學會編輯註冊表,學會使用組策略管理器(gpedit.msc)管理組策略等。
  • 大一下學期:
  1. 掌握C++部分語法,如引用類型、函數重載等,基本明白什麼是類。
  2. 學會使用棧和隊列等線性結構。
  3. 掌握BFS和DFS以及樹的前序、中序、後序遍歷。
  4. 學會分治策略。
  5. 掌握排序算法:選擇排序、歸併排序、快速排序、計數、基數排序等等。
  6. 動態規劃:最大子串和、最長公共子序列、最長單調遞增子序列、01揹包、完全揹包等。
  7. 數論:擴展歐幾里德算法、求逆元、同餘方程、中國剩餘定理。
  8. 博弈論:博弈問題與SG函數的定義、多個博弈問題SG值的合併。
  9. 圖論:圖的存儲、歐拉回路的判定、單源最短路Bellman-Ford算法及Dijkstra算法、最小生成樹Kruskal算法及Prim算法。
  10. 學會使用C語言進行網絡編程與多線程編程。
  11. 高等數學、線性代數:做幾道"矩陣運算"分類下的題目。
  12. 學習matlab,如果想參加數學建模大賽,需要學這個軟件。
  • 大一假期:
  1. 掌握C++語法,並熟練使用STL(重要)。
  2. 試着實現STL的一些基本容器和函數、使自己基本能看懂STL源碼。
  3. 數據結構:字典樹、並查集、樹狀數組、簡單線段樹。
  4. 圖論:使用優先隊列優化Dijkstra算法及Prim算法,單源最短路徑之SPFA,差分約束系統,多源多點最短路徑之FloydWarshall算法,求歐拉回路(圈套圈算法)。
  5. 拓撲排序:複雜BFS和DFS搜索、複雜模擬題訓練。
  6. 動態規劃:多重揹包、分組揹包、依賴揹包等各種揹包問題(參見揹包九講)。
  7. 計算幾何:判斷點是否在線段上、線段相交、圓與矩形的關係、點是否在多邊形內、點到線段的最近點、多邊形面積、求多邊形重心、求凸包、點在任意多邊形內外的判定。
  8. 學習使用C/C++連接數據庫、學習一種C++的開發框架來編寫一些窗體程序(如MFC、Qt)。
  • 大二全年:
  1. 熟練掌握數據結構:單調隊列、堆、並查集、樹狀數組、哈希表、線段樹、LCA與RMQ的轉化、後綴樹、字典樹、KMP算法、AC自動機理論與實現等等。
  2. 圖論一:強連通分量、雙連通分量、割點、橋、強連通分量和雙連通分量縮點、二分圖匹配(二分圖最大匹配、最小點集覆蓋、最小路徑覆蓋、二分圖最優匹配、二分圖多重匹配)、網絡流(最大流的基本SAP、最大流的ISAP/Dinic等高效算法、最小費用最大流、最大流最小割定理)等。
  3. 動態規劃:斜率優化、四邊形優化動態規劃、樹形動態規劃、狀態壓縮動態規劃,多做動態規劃難題,訓練思維,向動態規劃更高級進階。
  4. 數論和組合數學:高斯消元法、積性函數的應用、歐拉定理、費馬小定理、威爾遜定理、羣論基礎、Polya定理與計數問題、Catalan數。
  5. 計算幾何:多邊形間並蹱點對、凸多邊形間對蹱點對、四邊形剖分、三角剖分、凸多邊形最小周長外接矩形、凸多邊形最小面積外接矩形、凸多邊形間最小距離、凸多邊形直徑、凸多邊形的寬度等各種旋轉卡殼相關算法、最小覆蓋圓、定圓最大點集覆蓋、平面上最近點對、三維計算幾何算法。
  6. 圖論二:網路流的各種構圖訓練(重要)、最小割與最小點權覆蓋等的關係、次小生成樹、第k短路、最小比率生成樹等。
  7. 學好專業課知識:理解數據庫原理、學會SQL語句、學會使用觸發器、學好計算機組成原理。
  • 大二假期:
  1. 自學完離散數學。
  2. 自學概率論部分章節。
  3. 自學操作系統部分章節。
  • 大三以後:

選擇自己感興趣的方向進行研究,參加ACM-ICPC競賽的隊員,需要全面學習和集訓。

  • 課程推薦:

必學課程:C/C++/JAVA、數據結構、算法設計與分析、離散數學、線性代數、概率論、操作系統、網絡原理、編譯原理。

  • 書籍推薦
  1. 《C++ Primer中文版》
  2. 《C++ 編程思想》
  3. 《算法競賽入門經典》
  4. 《算法競賽入門經典:訓練指南》
  5. 《趣學算法》
  6. 《ACM國際大學生程序設計競賽:知識與入門》
  7. 《ACM國際大學生程序設計競賽:題目與解讀》
  8. 《算法藝術與信息學競賽》
  9. 《組合數學》
  10. 《數論入門》
  11. 《算法導論》
  12. 《ACM-ICPC世界總決賽試題解析》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章