ACM学习感想
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学习ACM感想
大二上半学期,由于报了大学生电子商务竞赛而进入实验室。在大一时,比较迷茫,不知道自己的专业什么内容重要,什么内容不重要。所以在大一下半学期学习C语言这门最基础的程序设计课的时候,老师上课在讲自己也不认真听讲。觉得只要考试能过就行了。结果考试是过了,但对于C语言还是一窍不通。
在大二下班学期,由于选了面向对象程序设计和数据结构,老师的内容不怎么听的懂。开始认识到C语言的重要性,自己从头开始自学,把非计算机专业的C语言借来看,慢慢的赶上去,不懂的就问问同学。把书认真的看了两遍后,再接触接触计量OJ上的题目提高一下自己。就这样我开始接触了ACM。ACM=算法+数据结构。第一次接触ACM,刚开始做简单题的时候我也感觉并不容易,比如有些英文题目看起来比较费劲,要看很久才能搞清楚题目意思,有时候简单题目交上去不正确,题目有很多trick,有时候代码看多了,人就会觉得很厌倦和郁闷,但是不要灰心,我觉得做什么事贵在坚持,只要坚持下来,就会越来越体会到ACM 的无穷乐趣了。后来自己独立思考,把一些没有算法的题目基本上都提交成功了。也觉得有一些成就感,从一点都不会到现在能把一些简单的题目解决。有算法的题目,就自己百度或查一些资料,由于没有老师的指导,有些算法还是模棱两可。在数据结构的课上,老师也给我们介绍了一些算法。
下面是我自己总结的算法:
一.基本算法:
(1)枚举.
(2)贪心
(3)递归和分治法
(4)递推
(5)构造法
(6)模拟法
二.图算法
(1)图的深度优先遍历和广度优先遍历.
(2)最短路径算法
(3)最小生成树算法
(4)拓扑排序
(5)二分图的最大匹配
(6)最大流的增广路算法(KM算法)
三.数据结构
(1)串
(2)排序(快排、归并排(与逆序数有关)、堆排)
(3)简单并查集的应用.
(4)哈希表和二分查找等高效查找法
(5)哈夫曼树
(6)堆
(7)trie树(静态建树、动态建树)
四.简单搜索
(1)深度优先搜索
(2)广度优先搜索
(3)简单搜索技巧和剪枝
五.动态规划
(1)背包问题.
(2)型如下表的简单DP
1.E[j]=opt{D+w(i,j)}
2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最长公共子序列)
3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最优二分检索树问题)
六.数学
(1)组合数学:
1.加法原理和乘法原理.
2.排列组合.
3.递推关系.
(2)数论.
1.素数与整除问题
2.进制位.
3.同余模运算.
(3)计算方法.
1.二分法求解单调函数相关知识
七.计算几何学.
(1)几何公式.
(2)叉积和点积的运用(如线段相交的判定,点到线段的距离等).
(3)多边型的简单算法(求面积)和相关判定(点在多边型内,多边型是否相交)
(4)凸包.
对上述一些排序算法能熟练的掌握。对于其他的一些算法,原理我还是比较熟悉的,要把书上长长的代码转化为自己的代码运用到题目中,还是觉得很难。学算法有一个很重要的方法:每学一种算法的时候可以先看书或者上网查,搞清楚原理之后,可以从OJ上找一些这类算法的简单题做,然后对这个算法比较熟了之后就可以找一些这种算法的变形等比较难的题目做,每做完一个题目我都会在代码旁边写好注释用word文档存起来,定期把文档打印出来。或者可以写下这题的解题报告,说明用什么算法做的,要注意什么问题,便于以后要看时能够快速理解。还有对于ACM程序设计不仅要求你做的题目要多,还要求你的代码长度和运行时间,所以要去研究别人的代码为什么比你短,运行时间为什么比你少。这样你才能有更大的进步。
要了解一些头文件的用处:
1、
2、
3、
4、
5、
6、
7、
8、
9、
10、
11、
12、
13、
14、
15、
16、
17、
18、
19、
20、
21、
22、
23、
24、
25、
26、
27、
C语言中要用到的头文件我基本上都已经总结出来了,要掌握经常用到的头文件(
我们现在用的编译器都是Microsoft Visual C++ 6.0,关于编程的时候还有一些小问题要注意:
1、拼写单词的时候要注意,还要注意单词的大小写。
2、一些符号要注意,不要把“==”写成赋值符号“=”,还有分号不要漏写。
这是我经常犯的错误。
3、oj上编辑器的问题,有写题目用C++超时,用G++却神速无比,有时候
又反过来,所以一些题目不妨用两个编辑器都交一下。又比如说一些
涉及精度的题只有用C++交才能提交。
4、还应该注意题目的要求,它要你用int,你就别用double或者float这
样你都是不能提交正确的。
在实验室一个学期,真的收获了很多,不管是人际关系还是学到的知识。在实验室认识了很多各方面的精英。在实验室尽管ACM没人教你,你花费的时间会