1. acm要学习哪些算法
最基本的、也是最核心的,掌握各种数据结构及其对应的高效算法,比如线性结构(顺序表、链表等)的查找、排序算法,树(二叉树、搜索树)的原理、基础的遍历、查找算法,图的原理、算法、应用场景。
学完之后就可以开始到各种OJ刷题了。
2. 参加ACM大赛应该准备哪些课程
课程:
(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”的气球。
3. acm计算几何算法
计算几何?这不是很多嘛。我这手里还有一本黑的书,就是讲计算几何的,不过我现在专业问题不会再研究ACM了……另外网上也有很多东西的。实在不行你就弄本《计算机图形学》,也有许多的问题啊。
4. acm竞赛的算法总共有那些范围 求大牛概括......
初级:
一.基本算法:
(1)枚举. (poj1753,poj2965)
(2)贪心(poj1328,poj2109,poj2586)
(3)递归和分治法.
(4)递推.
(5)构造法.(poj3295)
(6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)
二.图算法:
(1)图的深度优先遍历和广度优先遍历.
(2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dijkstra)
(poj1860,poj3259,poj1062,poj2253,poj1125,poj2240)
(3)最小生成树算法(prim,kruskal)
(poj1789,poj2485,poj1258,poj3026)
(4)拓扑排序 (poj1094)
(5)二分图的最大匹配 (匈牙利算法) (poj3041,poj3020)
(6)最大流的增广路算法(KM算法). (poj1459,poj3436)
三.数据结构.
(1)串 (poj1035,poj3080,poj1936)
(2)排序(快排、归并排(与逆序数有关)、堆排) (poj2388,poj2299)
(3)简单并查集的应用.
(4)哈希表和二分查找等高效查找法(数的Hash,串的Hash)
(poj3349,poj3274,POJ2151,poj1840,poj2002,poj2503)
(5)哈夫曼树(poj3253)
(6)堆
(7)trie树(静态建树、动态建树) (poj2513)
四.简单搜索
(1)深度优先搜索 (poj2488,poj3083,poj3009,poj1321,poj2251)
(2)广度优先搜索(poj3278,poj1426,poj3126,poj3087.poj3414)
(3)简单搜索技巧和剪枝(poj2531,poj1416,poj2676,1129)
五.动态规划
(1)背包问题. (poj1837,poj1276)
(2)型如下表的简单DP(可参考lrj的书 page149):
1.E[j]=opt{D[i]+w(i,j)} (poj3267,poj1836,poj1260,poj2533)
2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最长公共子序列)
(poj3176,poj1080,poj1159)
3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最优二分检索树问题)
六.数学
(1)组合数学:
1.加法原理和乘法原理.
2.排列组合.
3.递推关系.
(POJ3252,poj1850,poj1019,poj1942)
(2)数论.
1.素数与整除问题
2.进制位.
3.同余模运算.
(poj2635, poj3292,poj1845,poj2115)
(3)计算方法.
1.二分法求解单调函数相关知识.(poj3273,poj3258,poj1905,poj3122)
七.计算几何学.
(1)几何公式.
(2)叉积和点积的运用(如线段相交的判定,点到线段的距离等). (poj2031,poj1039)
(3)多边型的简单算法(求面积)和相关判定(点在多边型内,多边型是否相交)
(poj1408,poj1584)
(4)凸包. (poj2187,poj1113)
5. ACM初学者要学习的内容
ACM国际大学生程序设计竞赛:知识与入门.pdf
链接: https://pan..com/s/19OY2FJUkk4RhW5WTsPkwfQ
《ACM国际大学生程序设计竞赛:知识与入门》适用于参加ACM国际大学生程序设计竞赛的本科生和研究生,对参加青少年信息学奥林匹克竞赛的中学生也很有指导价值。
6. ACM常用的经典算法
1.明白内存在算法中的用处
2.二分查找 二分冥(a^b)
3.如果是计算机的,学数据结构的时候花点时间在二叉树上
4.递归
5.广搜 深搜 做点隐式图的题目 顺便学下状态的hash
6.最短路(spfa dij floyd) 我感觉可以当做搜索的优化
7.简单动态规划 背包等
8.要是你喜欢几何的话也可以看看几何中的一些基础知识 我感觉几何比较难拿分
接下可以学下线段树等一些数据结构(线段树可以优化很多问题,二叉树知道了,二分思想有了,线段树的基本操作可以秒杀)
接下去可以深入动态规划了。
接下去不归路在向你招手。
7. ACM 中常用的算法有哪些
排序(选择,冒泡,快速,归并,堆,基数,桶排序等)
递归,回溯
概率,随机
公约数,素数
因数分解
矩阵运算
线性规划
最小二乘
微积分
多项式分解和级数
图论算法:
哈夫曼树(即最优二叉树)
哈希表
Prim,Kruskal算法(即最小生成树算法)
红黑树
a-B剪枝法
深、广度搜索
拓扑排序
强连通分量
Dijkstra,Bellman-Ford,Floyd-Warashall算法(最短路径算法)
计算几何(线段相交,凸包,最近点对)
8. acmdfs判断无向图是否有环
如果存在回路,则必存在一个子图,是一个环路。环路中所有顶点的度>=2。
n算法:
第一步:删除所有度<=1的顶点及相关的边,并将另外与这些边相关的其它顶点的度减一。
第二步:将度数变为1的顶点排入队列,并从该队列中取出一个顶点重复步骤一。
如果最后还有未删除顶点,则存在环,否则没有环。
n算法分析:
由于有m条边,n个顶点。
i)如果m>=n,则根据图论知识可直接判断存在环路。(证明:如果没有环路,则该图必然是k棵树 k>=1。根据树的性质,边的数目m = n-k。k>=1,所以:m<n)
ii)如果m<n 则按照上面的算法每删除一个度为0的顶点操作一次(最多n次),或每删除一个度为1的顶点(同时删一条边)操作一次(最多m次)。这两种操作的总数不会超过m+n。由于m<n,所以算法复杂度为O(n)。
注:
该方法,算法复杂度不止O(V),首先初始时刻统计所有顶点的度的时候,复杂度为(V + E),即使在后来的循环中E>=V,这样算法的复杂度也只能为O(V + E)。其次,在每次循环时,删除度为1的顶点,那么就必须将与这个顶点相连的点的度减一,并且执行delete node from list[list[node]],这里查找的复杂度为list[list[node]]的长度,只有这样才能保证当degree[i]=1时,list[i]里面只有一个点。这样最差的复杂度就为O(EV)了。
9. acm中基本算法有哪些
回溯算法,贪心法,蛮力法,动态规划,分支限界,图算法
10. ACM 中常用的算法有哪些
大概分为数论算法,图论算法,A*算法。数论算法: 排序(选择,冒泡,快速,归并,堆,基数,桶排序等) 递归,回溯 概率,随机 公约数,素数 因数分解 矩阵运算 线性规划 最小二乘 微积分 多项式分解和级数 图论算法: 哈夫曼树(即最优二叉树) 哈希表 Prim,Kruskal算法(即最小生成树算法) 红黑树 a-B剪枝法 深、广度搜索 拓扑排序 强连通分量 Dijkstra,Bellman-Ford,Floyd-Warashall算法(最短路径算法) 计算几何(线段相交,凸包,最近点对) A*算法: 动态规划 贪心算法 KMP算法 哈密顿回路问题 子集问题 博弈(极大极小值算法等)