ACM课程总结

ACM课程总结

本学期所学的ACM已经算是告一段落了,总体来说,对它的感觉是有喜有悲,喜的是从这里学到了对待问题的思维方式,悲的是ACM的相关题目还是不算容易,一道简单题有可能还得花上一些时间方可AC,不过A过一道题后的喜悦是不言而喻的。废话不多说,下面来对本学期的ACM课程做个总结。

Part 1 习得的知识

一、 贪心算法
一)基本概念:
所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。
贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。
所以对所采用的贪心策略一定要仔细分析其是否满足无后效性。
二)贪心算法的基本思路:
1.建立数学模型来描述问题。
2.把求解的问题分成若干个子问题。
3.对每一子问题求解,得到子问题的局部最优解。
4.把子问题的解局部最优解合成原来解问题的一个解。
三)贪心算法适用的问题
贪心策略适用的前提是:局部最优策略能导致产生全局最优解。
实际上,贪心算法适用的情况很少。一般,对一个问题分析是否适用于贪心算法,可以先选择该问题下的几个实际数据进行分析,就可做出判断。
四)贪心算法的实现框架
从问题的某一初始解出发;
while (能朝给定总目标前进一步)
{
利用可行的决策,求出可行解的一个解元素;
}
由所有解元素组合成问题的一个可行解;
五)贪心策略的选择
因为用贪心算法只能通过解局部最优解的策略来达到全局最优解,因此,一定要注意判断问题是否适合采用贪心算法策略,找到的解是否一定是问题的最优解。
二、 搜索
搜索简介
搜索算法是利用计算机的高性能来有目的地穷举一个问题的部分或所有的可能情况,从而求出问题的解的一种方法。
相比于单纯的枚举算法有了一定的方向性和目标性。算法是在解的空间里,从一个状态转移(按照要求拓展)到其他状态,这样进行下去,将解的空间中的状态遍历,找到答案(目标的状态)。
搜索分类:
在搜索这一部分主要讲的有入门的如二分、三分,BFS,DFS,还有一些结合其他的比较综合的算法,如优先队列+BFS,优先队列BFS+剪枝,双向BFS,DFS+剪枝,DFS+奇偶剪枝,BFS+剪枝,BFS+一个判断技巧,BFS+同余剪枝等等,总之复杂来说种类就太多了,关键是掌握基础的然后在不同题目中进行拓展。下面来复习总结下主要的几种搜索,然后回顾相应的几个例题。
1. 二分搜索
基本思想:在一个单调有序的集合中查找元素,每次将集合分为左右两部分,判断解在哪个部分中并调整集合上下界,重复直到找到目标元素。 
2.三分搜索
基本思想:与二分法类似,当需要求某凸性或凹形函数的极值,通过函数本身表达式并不容易求解时,就可以用三分法不断逼近求解。
3.BFS
基本思想:从初始状态S 开始,利用规则,生成所有可能的状态。构成的下一层节点,检查是否出现目标状态G,若未出现,就对该层所有状态节点,分别顺序利用规则。 生成再下一层的所有状态节点,对这一层的所有状态节点检查是否出现G,若未出现,继续按上面思想生成再下一层的所有状态节点,这样一层一层往下展开。直到出现目标状态为止。
4.DFS
基本思想:从初始状态,利用规则生成搜索树下一层任一个结点,检查是否出现目标状态,若未出现,以此状态利用规则生成再下一层任一个结点,再检查,重复过程一直到叶节点(即不能再生成新状态节点),当它仍不是目标状态时,回溯到上一层结果,取另一可能扩展搜索的分支。采用相同办法一直进行下去,直到找到目标状态为止。

三、 动态规划
基础知识:
什么是动态规划呢,简单来说,动态规划是解决多阶段决策问题的一种方法。多阶段决策问题是说如果一类问题的求解过程可以分为若干个互相联系的阶段,在每一个阶段都需作出决策,并影响到下一个阶段的决策。多阶段决策问题,就是要在可以选择的那些策略中间,选取一个最优策略,使在预定的标准下达到最好的效果。
动态规划的指导思想就是在做每一步决策时,列出各种可能的局部解;依据某种判定条件,舍弃那些肯定不能得到最优解的局部解;以每一步都是最优的来保证全局是最优的。
动态规划问题具有以下基本特征:
问题具有多阶段决策的特征;
每一阶段都有相应的“状态”与之对应,描述状态的量称为“状态变量”;
每一阶段都面临一个决策,选择不同的决策将会导致下一阶段不同的状态;
每一阶段的最优解问题可以递归地归结为下一阶段各个可能状态的最优解问题,各子问题与原问题具有完全相同的结构。
动态规划问题的一般解题步骤
1、判断问题是否具有最优子结构性质,若不具备则不能用动态规划。
2、把问题分成若干个子问题(分阶段)。
3、建立状态转移方程(递推公式)。
4、找出边界条件。
5、将已知边界值带入方程。
6、 递推求解。
四、 图算法
图 (Graph) 是一种复杂的非线性数据结构,由顶点集合及顶点间的关系(也称弧或边)集合组成。可以表示为: G=(V, {VR})
其中 V 是顶点的有穷非空集合; VR 是顶点之间关系的有穷集合,也叫做弧或边集合。弧是顶点的有序对,边是顶点的无序对。
度:无向图中顶点 v 的度是和 v 相关联的边的数目,记为TD(v)。
入度:有向图中以顶点 v 为终点的弧数目称为 v 的入度,记ID(v)。
出度:有向图中以顶点 v 为起点的弧数目称为 v 的出度,记OD(v)。
度:入度和出度之和,即:TD(v) = ID(v) + OD(v)。
如果顶点 vi 的度为 TD(vi),则一个有 n 个顶点e 条边(弧) 的图,满足如下关系:
终端顶点:有向图中把出度为 0的顶点称为终端顶点。
路径:从顶点v到v´的路径是一个顶点序列 (v= vi, 0, vi, 1, …, vi, m=v´),满足 (vi, j-1, vi, j)VR 或

Part2 ACM课程感想

说感想之前,先说说从老师以及前辈们了解的ACM对大学以及未来发展所带来的利弊。
利:
毫无疑问,你的编程能力(注意这里不是软件开发能力)会得到大幅度地提升。ACM比赛注重短时间地写出正确的代码,是完全正确的代码。在ACM比赛中,只有对的代码和错的代码(在现实生活中可不一定是这样的),没有一本正确的代码。
你的算法能力会得到很好的锻炼。在以前的教科书里,算法是计算机学科的核心。虽然现在的观念淡化了算法的重要性,更多地注重软件的架构和利益等方面,但是基本的算法学习还是必不可少的。扎实的算法和数学功底是计算机研究的必备条件,而这些正是ACM竞赛所培养的。
ACM竞赛讲究三人组队配合,这点很符合现实中的团队合作,如何作为队长合理管理团队,如何作为队员提高配合效率都是ACM比赛教会你的。
ACM竞赛由于其权威性,并能选拔出高质量的计算机人才,得到世界各大IT公司的支持。Google, Microsoft都曾赞助过ACM竞赛,国内百度,有道也开始大力支持。同时各大公司也推出类似ACM竞赛的选拔比赛,并给出高额的奖金吸引人才。Google Code Jam, Topcoder, Baidu Astar基本成为计算机顶尖人才进入这些公司的捷径。
弊:
正如上文所说,ACM竞赛追求完全正确的算法和代码,这与现实生活中的软件开发和计算机研究有所不同。软件开发很难做到完全没有bug,而计算机研究更是在追求不断智能的路上永无止境。同时,ACM竞赛只要求代码的正确性,没有涉及代码的风格以及相应的文档配套,这会对以后的软件开发留下不好的习惯。(当然,以上都是观念及习惯的改变,如果想改,完全是可以改好的。)
ACM竞赛需要长时间的积累,要想出好成绩基本需要花费大学的大量时间,许多ACMer都是成天成天地刷题,熬夜参加练习赛。由于长时间的接触电脑,导致身体健康情况,人际交往能力等都会受到一定的影响。
ACM的训练及比赛都是个脑力与体力同时承受煎熬的过程。经常一道题目就会花费你1天乃至数天的精力,一场5个小时的比赛就像一场马拉松,谁能坚持到最后,谁就是赢家。这里面的艰辛,只有正在投身其中才能体会。
所以说,ACM不是人人都适合,恰恰相反,它只适合少数人。有人说它是智者的游戏,我认为是智者和勤奋人的游戏。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值