算法之路该如何学习

算法之路该如何学习,第1张

第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打出来

1最短路(Floyd、Dijstra,BellmanFord)

2最小生成树(先写个prim,kruscal要用并查集,不好写)

3大数(高精度)加减乘除

4二分查找 (代码可在五行以内)

5叉乘、判线段相交、然后写个凸包

6BFS、DFS,同时熟练hash表(要熟,要灵活,代码要简)

7数学上的有:辗转相除(两行内),线段交点、多角形面积公式

8 调用系统的qsort, 技巧很多,慢慢掌握

9 任意进制间的转换

第二阶段:练习复杂一点,但也较常用的算法。

如:

1 二分图匹配(匈牙利),最小路径覆盖

2 网络流,最小费用流。

3 线段树

4 并查集。

5 熟悉动态规划的各个典型:LCS、最长递增子串、三角剖分、记忆化dp

6博弈类算法。博弈树,二进制法等。

7最大团,最大独立集。

8判断点在多边形内。

9 差分约束系统

10 双向广度搜索、A算法,最小耗散优先

相关的知识

图论

路径问题

0/1边权最短路径

BFS

非负边权最短路径(Dijkstra)

可以用Dijkstra解决问题的特征

负边权最短路径

Bellman-Ford

Bellman-Ford的Yen-氏优化

差分约束系统

Floyd

广义路径问题

传递闭包

极小极大距离/ 极大极小距离

Euler Path / Tour

圈套圈算法

混合图的Euler Path / Tour

Hamilton Path / Tour

特殊图的Hamilton Path / Tour 构造

生成树问题

最小生成树

第k小生成树

最优比率生成树

0/1分数规划

度限制生成树

连通性问题

强大的DFS算法

无向图连通性

割点

割边

二连通分支

有向图连通性

强连通分支

2-SAT

最小点基

有向无环图

拓扑排序

有向无环图与动态规划的关系

二分图匹配问题

一般图问题与二分图问题的转换思路

最大匹配

有向图的最小路径覆盖

0 / 1矩阵的最小覆盖

完备匹配

最优匹配

稳定婚姻

网络流问题

网络流模型的简单特征和与线性规划的关系最大流最小割定理

最大流问题

有上下界的最大流问题

循环流

最小费用最大流/ 最大费用最大流

弦图的性质和判定

组合数学

解决组合数学问题时常用的思想

逼近

递推/ 动态规划

概率问题

Polya定理

计算几何/ 解析几何

计算几何的核心:叉积/ 面积

解析几何的主力:复数

基本形

直线,线段

多边形

凸多边形/ 凸包

凸包算法的引进,卷包裹法

Graham扫描法

水平序的引进,共线凸包的补丁完美凸包算法

相关判定

两直线相交

两线段相交

点在任意多边形内的判定

点在凸多边形内的判定

经典问题

最小外接圆

近似O(n)的最小外接圆算法

点集直径

旋转卡壳,对踵点

多边形的三角剖分

数学/ 数论

最大公约数

Euclid算法

扩展的Euclid算法

同余方程/ 二元一次不定方程

同余方程组

线性方程组

高斯消元法

解mod 2域上的线性方程组

整系数方程组的精确解法

矩阵

行列式的计算

利用矩阵乘法快速计算递推关系分数

分数树

连分数逼近

数论计算

求N的约数个数

求phi(N)

求约数和

快速数论变换

……

素数问题

概率判素算法

概率因子分解

数据结构

组织结构

二叉堆

左偏树

二项树

胜者树

跳跃表

样式图标

斜堆

reap

统计结构

树状数组

虚二叉树

线段树

矩形面积并

圆形面积并

关系结构

Hash表

并查集

路径压缩思想的应用

STL中的数据结构

vector

deque

set / map

动态规划/ 记忆化搜索

动态规划和记忆化搜索在思考方式上的区别

最长子序列系列问题

最长不下降子序列

最长公共子序列

最长公共不下降子序列

一类NP问题的动态规划解法

树型动态规划

背包问题

动态规划的优化

四边形不等式

函数的凸凹性

状态设计

规划方向

线性规划

常用思想

二分最小表示法

KMP Trie结构

后缀树/后缀数组LCA/RMQ

有限状态自动机理论

排序

选择/冒泡快速排序堆排序归并排序基数排序拓扑排序排序网络

课程:

(1)基本算法: 二分,分治,贪心

(2) 离散数学离散数学动态规划

(3) 搜索算法:深度优先 搜索,广度优先搜 A算法 ,阿尔法贝塔剪枝

(4)数据结构:  线段树, 树状数组,并查集,Trie图

(5)图论问题:最小生成树 最短路 强连通分量、桥和割点

(6)网络流算法:基本的网络流算法,Dinic算法,带上下界的网络流,最小费用流

(7)计算几何:线与线求交,线与面求交,求凸包,半平面求交等

(8) 离散数学,高等数学,线性代数,初等数论,计算几何

(9)计算机专业英语

(10)C++;基础的递归、枚举算法

扩展资料:

1参赛队伍最多由三名参赛队员组成。

2竞赛中命题10题左右,试题描述为英文,比赛时间为5个小时,前四个小时可以实时看到排名,最后一小时封榜,无法看到排名。

3竞赛可以使用的语言:Java, C, C++, Kotlin 和 Python。

4重点考察选手的算法和程序设计能力,不考察实际工程中常用的系统编程,多线程编程等等;

5选手可携带任何非电子类资料,包括书籍和打印出来的程序等,部分赛区会对选手携带的纸质资料做限制。

6评委负责将结果(正确或出错的类型)通过网络尽快返回给选手,除此之外不提供任何额外帮助;

7每个题目对应一种颜色的气球,通过该题目的队伍会得到对应颜色气球。每道题目第一支解决掉它的队还会额外获得一个“FIRST PROBLEM SOLVED”的气球。

参考资料:

北京大学暑期课:ACM/ICPC竞赛训练

百度百科-ACM国际大学生程序设计竞赛

必备:模拟高精度加、减、乘

图论图的表示:邻接矩阵,邻接表,边表

传递闭包和floyd

最小生成树算法(至少会一种)

单源最短路dijkstra(O(n2))或者bellman(spfa优化,O(km))

拓扑排序

树 树的先序、中序、后序遍历

树中的最长路(两遍bfs或者dfs)

并查集

搜索深搜、宽搜

排序冒泡排序、快速排序 选择排序 记数排序(又称“桶排”)

动态规划

01背包,无限背包

数论

最大公约数和最小公倍数,进制转换

需要:模拟

表达式求值(中缀转后缀,栈的 *** 作)、前缀表达式、中缀表达式、后缀表达式之间的相互转化

树线段树 字母树

搜索迭代深搜

动态规划

树形动态规划、最长不下降子序列、最长公共子序列和最长公共子串

排序归并排序、堆排序

串 KMP(字串匹配)

数论 判断质数(sqrt式与筛法求素数)

有序表顺序表、链表、线段树及其基本 *** 作

图论

Dijkstra算法的堆优化、求割点、求割边、强连通分量、欧拉路(边一次)、汉密尔顿回路(点一次)、差分约束系统

动态规划

状态压缩的动态规划

分治二分查找、二分答案、最近点对

树 归并树(逆序对)

其他

Hash、矩形切割(与线段树的比较)

数论欧拉函数

几何线段相交

有序表树状数组

树 Lca(最近公共祖先)与rmq(区间最值)

图论匹配算法(最大匹配,最小点覆盖,最小路径覆盖,最大独立集)

网络流算法(最大流dinic,最小费用流spfa)

动态规划动态规划的优化(快速幂,改变状态,优化转移,单调性,四边形不等式)

串 Kmp扩展、AC自动机

数论 中国剩余定理、概率与期望

几何 最远点对(旋转卡壳) 、凸包(水平序和极角序)

、半平面交

有序表平衡树(sbt、treap、splay)后缀数组

其他随机化算法、高斯消元

书:算法导论

《Free Pascal语言与基础算法》(第三版)

《全国青少年信息学奥林匹克竞赛辅导丛书(中学高级本)》

《青少年信息学奥林匹克竞赛实战辅导丛书》系列(《数学与程序设计》和《数据结构与应用》)

以上就是关于算法之路该如何学习全部的内容,包括:算法之路该如何学习、参加ACM大赛应该准备哪些课程、NOIP 如果想得全国一等奖的话需要学习那些知识等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9440460.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存