Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ACM竞赛学习指南(算法工程师成长计划)

ACM竞赛学习指南(算法工程师成长计划)

作者头像
rainchxy
发布于 2018-09-13 08:02:34
发布于 2018-09-13 08:02:34
4K0
举报
文章被收录于专栏:趣学算法趣学算法

算法工程师成长计划

近年来,算法行业异常火爆,算法工程师年薪一般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世界总决赛试题解析》
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年10月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ACM训练计划
看完人家的博客,发现任重道远。。。 一位高手对我的建议: 一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成功.acm主要是考算法的,主要时间是花在思考算法上,不是花在写程序与debug上。 下面给个计划你练练: 第一阶段: 练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码, 因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打 出来. 1.最短路(Floyd、Dijstra,BellmanFord) 2.最小生成树(先写个prim
Angel_Kitty
2018/04/08
1.7K0
掌握这些核心算法,拿不到10+个offer你来找我,我锤飞你个不争气的
不得不说现在算法岗的热门程度已经到了一个空前绝后的程度,所以这一岗位的就业形势也是非常严峻。
北游
2021/07/26
4900
ACM成长之路(干货) 我爱ACM,与君共勉
大学期间,ACM队队员必须要学好的课程有: l C/C++两种语言 l 高等数学 l 线性代数 l 数据结构 l 离散数学 l 数据库原理 l 操作系统原理 l 计算机组成原理 l 人工智能 l 编译原理 l 算法设计与分析 除此之外,我希望你们能掌握一些其它的知识,因为知识都是相互联系,触类旁通的。
风骨散人Chiam
2020/10/28
1.2K0
再谈ACM训练计划及题号总结归纳
为学弟学妹们指明一条训练之路~~~帮助他们刷题有方QAQ(之前好像也有总结过,可能你们找找我博客,说不定能找到~~~) OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: 一.基本算法:        (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治
Angel_Kitty
2018/04/10
1.3K0
新手ACM算法学习建议
一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成功。ACM主要是考算法的,主要时间是花在思考算法上,不是花在写程序与debug上。
ACM算法日常
2018/08/07
8460
ACM算法总结及刷题参考
参考:http://bbs.byr.cn/#!article/ACM_ICPC/11777
饶文津
2020/05/31
1.5K0
ACM模版-f_zyj v 2.0——更新通知
距离 ACM模版-f_zyj v 1.1\text{ACM模版-f_zyj v 1.1} 版成工已经一年整了,这一年,我每次发现其中有不足时,都会在我在博客 ACM在线模版-f-zyj\text{ACM在线模版-f-zyj} 中对其进行更新,稀稀拉拉的一年过去了,我发现增删改的地方实在不少,所以总是有朋友问我什么时候会将这些更新整理到 PDFPDF 格式中……
f_zyj
2019/05/27
6340
算法标签
数据结构 数组 Array 栈 Stack 队列 Queue 优先队列(Priority Queue, heap) 链表 LinkedList(single/double) Tree/ Binary Tree Binary Search Tree HashTable Disjoint Set Trie BloomFliter LRU Cache 算法分类 线性结构 莫队 (Mo’s Algorithm) 前缀和 基本数组 向量 链接表(linked list) 栈(stack) 队列 块状链表
Spaceack
2020/11/04
7780
图论模板整理合集
链接:https://pan.baidu.com/s/1yuII_btZspV5GVhAtlcl0Q  提取码:vvfn
风骨散人Chiam
2020/10/28
5240
visualgo学习与使用
visualgo是新加坡国立大学计算机学院一位很棒的博士老师Dr. Steven Halim 在2011年写的一个可视化数据结构和计算机常用算法的开源项目,虽然现在没有维护了,但不可否认他依旧是一个很棒的网站。它最初的目的是为了帮助他的学生更好地理解算法和数据结构,但随着时间的推移,它已经成为了一个广受欢迎的在线教育工具。
天天Lotay
2023/10/15
4300
visualgo学习与使用
《算法和数据结构》学习路线指引
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/127206.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/25
7130
《算法和数据结构》学习路线指引
《算法设计与分析》学习笔记
假定每次执行第i行所花的时间是常量ci;对 j = 2, 3, … n, 假设tj表示对那个值 j 执行while循环测试的次数。
叶茂林
2023/07/30
3210
《算法设计与分析》学习笔记
《算法和数据结构》题海战术篇
大家好,又见面了,我是你们的朋友全栈君。 文章目录 1️⃣前言:追忆我的刷题经历 2️⃣算法和数据结构的重要性 👪1、适用人群 🎾2、有何作用 📜3、算法简介 🌲4、数据结构 3️⃣如何开始持续的刷题 📑1、立军令状 👩‍❤️‍👩2、培养兴趣 🚿3、狂切水题 💪🏻4、养成习惯 🈵5、一周出师 4️⃣简单数据结构的掌握 🚂1、数组 🎫2、字符串 🎇3、链表 🌝4、哈希表 👨‍👩‍👧5、队列 👩‍👩‍👦‍👦6、栈 🌵7、二叉树 🌳8、多叉树 🌲9、森林 🍀10、树状数组 🌍11、图 5️
全栈程序员站长
2022/09/05
3190
《算法和数据结构》题海战术篇
杭电OJ刷题指南
说起来刷题,很多大牛都会推荐LeetCode或者牛客网,这两个网站是刷题的好网站。但对新手来说,有一点难度,新手建议先去杭电OJ刷题,这里的题目难度不大,如果你是大一大二,或者其他专业转计算机专业的学生,可以先去杭电OJ刷题,本文为杭电OJ刷题指南。
Jasonangel
2021/05/28
5.3K0
一位算法工程师的自我修养
数据结构与算法 基本算法思想 动态规划 贪心算法 回溯算法 分治算法 枚举算法 算法基础 时间复杂度 空间复杂度 最大复杂度 平均复杂度 基础数据结构 数组 动态数组 树状数组 矩阵 栈与队列 栈 队列 阻塞队列 并发队列 双端队列 优先队列 堆 多级反馈队列 线性表 顺序表 链表 单链表 双向链表 循环链表 双向循环链表 跳跃表 并查集 哈希表(散列表) 散列函数 碰撞解决办法: 开放地址法 链地址法 再次哈希法 建立公共溢出区 布隆过滤器 位图 动态扩容 树 二叉树: 各种遍历,递归与非递归 二
攻城狮Chova
2022/01/22
4720
ACM一年记,总结报告(希望自己可以走得很远)
一、 知识点梳理 (一) 先从工具STL说起: 容器学习了:stack,queue,priority_queue,set/multiset,map/multimap,vector。 1.stack: 栈是一种只能在某一端插入和删除数据的特殊线性表。他按照先进先出的原则存储数据,先进的数据被压入栈底,最后进入的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后被压入栈的,最先弹出)。因此栈也称先进后出表。 2.queue: 是典型的先进先出容器,FIFO(first-in-first-out),通俗点说就,这个容器就像是在排队,走的人在前面走,来的人在后面排,排队的顺序和离开的顺序是相同的。 3. priority_queue: 优先队列priority_queue可理解为一个大根堆,有特定权值的先出队,也形象的举个例子,拍卖,无论出手多晚,只要出价足够高,就可以拿走拍卖品。(但是,在优先队列里,元素排列绝对不是完全单调的,只能确定队首元素是最大的,保证出队顺序是单调的) 4.vector: 简单地说,vector是一个能够存放任意类型的动态数组,能够增加和删除数据,可以直接访问向量内任意元素。 5. set/multiset: 两容器相似,但set为有序集合,元素不能重复,multiset为有序多重集合,可包含若干相等的元素,可以放结构体,但是一定要重载排列方式,不然编译都过不了,set的查找于插入元素的复杂度为log(N),是一个比较好用的容器。 PS:但是,在使用结构体时,有几个元素,就要写几个元素的比较,不然会被视为同一个元素: 6.map/multimap:map映射容器的元素数据是由一个Key和一个Value成的,key与映照value之间具有一一映照的关系。map插入元素的键值不允许重复,类似multiset,multimap的key可以重复。比较函数只对元素的key进行比较,元素的各项数据只能通过key检索出来。虽然map与set采用相同的数据结构,但跟set的区别主要是set的一个键值和一个映射数据相等,Key=Value。就好像是set里放的元素是pair组成了map,map的key也可以为自定义数据类型,但是也要像上文set一样写重载函数。 算法(algorithm):在算法头文件下包括了好多函数,下面列出常用的。
风骨散人Chiam
2020/10/28
5330
蓝桥杯-03-蓝桥杯学习计划
相关文献 报了蓝桥杯比赛,几乎零基础,如何准备,请大牛指导一下。谢谢? 蓝桥杯2022各组真题汇总(完整可评测)
用户2225445
2023/12/05
2660
蓝桥杯-03-蓝桥杯学习计划
软考高级架构师:最小生成树和克鲁斯卡尔算法、普利姆算法
图论是研究图的数学理论和方法,其中图是由顶点集合及连接这些顶点的边集合组成的数学结构。图论在计算机科学、网络规划、生物信息学等众多领域都有重要应用。最小生成树(Minimum Spanning Tree,MST)是图论中一个经典问题,指在一个加权连通图中寻找一棵权值最小的生成树。克鲁斯卡尔(Kruskal)算法和普利姆(Prim)算法是解决最小生成树问题的两种著名算法。
明明如月学长
2024/05/25
1910
软考高级架构师:最小生成树和克鲁斯卡尔算法、普利姆算法
Qtech 暑假未讲到的算法(不完全)
一、数据结构: 优先队列、堆、RMQ问题(区间最值问题,可以用线段树解决,还有一个Sparse-Table算法)、排序二叉树、划分树、归并树..... 字符串处理: KMP、字典树、后缀树、后缀数组(两种求后缀数组的方法 倍增和DC3算法) 包括C++ STL 里面一些东西 比如sort vector map set stack queue mulitmap mulitmap proptity_queue....... 还有快排、归并、堆、冒泡、选择、插入、希尔、基数、计数、地精等排序算法最好了解一下,还有基于快排的区间第K值的快速查找法
xindoo
2021/01/21
3630
信息学奥赛考察知识点
【信息来源】 http://www.noi.cn/RequireFile.do?fid=Dt8gjEaa&attach=n 一级标准 1.程序的基本结构。 2.标识符与关键字。 3.基本数据类型。 4
海天一树
2019/10/19
1.2K0
相关推荐
ACM训练计划
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档