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世界总决赛试题解析》

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏量化投资与机器学习

【独家重磅】来自华尔街的量化金融面试Q&A(第一期)

这是一个十分简单的问题。因为10=2*5,所以0的个数就是100!因式分解后2*5(必须配对)的个数。显然因式分解中2的个数比5多,因此问题划归为5的个数决定了...

1222
来自专栏后端技术探索

算法之经典背包问题分析与实例

我们人类是一种贪婪的动物,如果给您一个容量一定的背包和一些大小不一的物品,裝到背包里面的物品就归您,遇到这种好事大家一定不会错过,用力塞不一定是最好的办法,...

981
来自专栏C语言及其他语言

【每日一题】问题 1429[蓝桥杯][历届试题]兰顿蚂蚁

题目描述 ? 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。 平面上的正方形格子被填上黑色或白色。在其中一格正方形内有...

2926
来自专栏窗户

怀念Galois

  我的第一篇谈到具体学科的博客,还是献给我最钟爱的数学。   个人比较喜欢离散数学,并非因为曲高和寡,而是因为数学分析、概率论、拓扑学、泛函之类的高手实在太多...

1965
来自专栏C语言及其他语言

[每日一题]老王赛马

题目描述 赛马是一古老的游戏,早在公元前四世纪的中国,处在诸侯割据的状态,历史上称为“战国时期”。在魏国作官的孙膑,因为受到同僚庞涓的迫害,被齐国使臣救出后,到...

2779
来自专栏奇点大数据

遗传算法(2)

在遗传算法中我们再举一个求极大值的例子。这种例子也是比较多见的,只要我们把一些数据关系描述成函数之后就会有一些求极大值或者极小值的问题。 其实极大值和极小值是一...

35012
来自专栏大数据

大数据图:循环点阵

本文的内容最初由Marko Rodriguez和Bobby Norton在Aurelius博客上共同撰写。

3425
来自专栏大数据挖掘DT机器学习

利用主成分分析构建股票指数

作者:谢佳标 中国R语言大会讲师,高级数据分析师,8年以上数据挖掘建模工作实战经验 https://ask.hellobi.com/blog/xiejiabi...

2989
来自专栏ATYUN订阅号

赫尔辛基大学AI基础教程:搜索和游戏(2.3节)

在本节中,我们将研究一个经典的AI问题:游戏。为了清晰起见,我们将重点关注的最简单的场景是双人游戏,如井字棋和国际象棋等完全信息游戏。

983
来自专栏Java面试通关手册

六道面试中常见的智力题 来看看你会做几道?

下面的题目来自滴滴出行2017秋招题。这些题目是我自己觉得比较难或者比较容易出错的题目。

2454

扫码关注云+社区

领取腾讯云代金券