近年來,算法行業異常火爆,算法工程師年薪一般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算法。
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世界總決賽試題解析》
-
算法工程師
+關注
關注
2文章
30瀏覽量
6093
發布評論請先 登錄
相關推薦
評論