如何成为一名算法工程师(如何成为一个算法工程师)

近几年算法行业异常火热,算法工程师年薪普遍在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算法,欧拉路径(snare circle算法)。

5.拓扑排序:复杂BFS和DFS搜索,复杂模拟训练。

6.动态规划:多背包、分组背包、依赖背包等各种背包问题(见第9讲背包)。

7.计算几何:判断点是否在线段上,线段的交点,圆与矩形的关系,点是否在多边形内,到线段最近的点,多边形面积,多边形的重心,凸包,确定点在任意多边形内还是外。

8.学会用C/C连接数据库,学会一个C开发框架写一些表单程序(比如MFC和Qt)。

大二:

1.精通数据结构:单调队列、堆、并集、树数组

2.图论1:强连通分支、双连通分支、切割点、桥、强连通分支和双连通分支的收缩点、二分匹配(二分图最大匹配、最小点集覆盖、最小路径覆盖、二分图最优匹配、二分图多重匹配)、网络流(最大流的基本SAP、最大流的SAP迪尼奇、最小费用最大流、最大流的最小切割定理等高效算法

3.动态规划:斜率优化、四边形优化动态规划、树形动态规划、状态压缩动态规划。多做动态编程题,训练思维,向更高层次的动态编程前进。

4.数论和组合数学:高斯消去法,乘积函数的应用,欧拉定理,费马定理,威尔逊定理,群论的基础,Polya定理和计数问题,Catalan数。

5.计算几何:各种旋转-堵塞相关算法,如多边形之间的平行点对、凸多边形之间的平行点对、四边形细分、三角剖分、凸多边形外接矩形的最小周长、凸多边形外接矩形的最小面积、凸多边形之间的最小距离、凸多边形的直径、凸多边形的宽度等。最小覆盖圆、固定圆最大点集覆盖、平面上最近的点对以及三维计算几何算法。

6.图论2:网络流的各种构成训练(重要),最小割与最小点权覆盖的关系,次最小生成树,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世界总决赛试题解析》