在网上看到别人ACM学习的心得,转载过来,源地址不记得了,当时是百度的。内容如下:
网络上流传的答案有很多,估计提问者也曾经去网上搜过。所以根据自己微薄的经验提点看法。
我ACM初期是训练编码能力,以水题为主(就是没有任何算法,自己靠动脑筋能够实现的),这种题目特点是麻烦,但是不难,30-50道题目就可以了。
然后可以接触一下基础的算法,我感觉搜索方向的比较不错,可以解决很多问题,深搜,广搜,然后各种剪枝能力的锻炼。
搜索感觉不错了就可以去看看贪心,图论,和动态规划方向的了。图论有最短路径,最小生成树,网络流,拓扑排序等等很多,动态规划先去书上看经典例子,最长公共子序列等。各种变形的题目。
数学是ACM中极具杀伤力的武器,我一向很羡慕数学好的队友,精力有限自己数学方面的算法只能说入门。这方面经典的数论,组合数学方面的比较多,计算几何是很重要的,经典模型要熟悉,最近点对,二维三维,凸包以及各种应用。
数据结构方面的就比较多了,基础的堆,栈,队列,并查集,二叉查找树,红黑树,trie树,hash表等等。 用C++参赛的话STL要熟悉,有时候很有帮助,里面的queue,list,map,stack等。
ACM到后来算法就成了工具,不断的靠自己意淫一个新的解法来解决问题是最开心的事情了。我们学校ACM一直是一届带一届的,老师只提供经济上的援助,上面的内容是我在大三当队长时教给大一的新队员的入门内容,再深的就靠每个人自己发掘了。

  我年轻的时候也觉得ACM考察的是算法和coding

年纪大了以后,我明白了,ACM考察的其实是YY

 有算法的题都是秒杀题,难题都是YY一个方法,或是做一个畸形的变化转成一个有固定解的模型

一位高手对我的建议:
一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成功.acm主要是考算法的,主要时间是花在思考算法上,不是花在写程序与debug上。
下面给个计划你练练:
第一阶段:
练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打出来.
1.最短路(Floyd、Dijstra、BellmanFord)
2.最小生成树(先写个prim,kruscal要用并查集,不好写)
3.大数(高精度)加减乘除
4.二分查找. (代码可在五行以内)
5.叉乘、判线段相交、然后写个凸包.
6.BFS、DFS,同时熟练hash表(要熟,要灵活,代码要简)
7.数学上的有:辗转相除(两行内),线段交点、多角形面积公式.
8. 调用系统的qsort, 技巧很多,慢慢掌握.
9. 任意进制间的转换

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

  1. 二分图匹配(匈牙利),最小路径覆盖
  2. 网络流,最小费用流。
  3. 线段树.
  4. 并查集。
  5. 熟悉动态规划的各个典型:LCS、最长递增子串、三角剖分、记忆化dp
    6.博弈类算法。博弈树,二进制法等。
    7.最大团,最大独立集。
    8.判断点在多边形内。
  6. 差分约束系统.
  7. 双向广度搜索、A*算法,最小耗散优先.

第三阶段:
前两个阶段是打基础,第三阶段是锻炼在比赛中可以快速建立模型、想新算法
。这就要平时多做做综合的题型了。

  1. 把oibh上的论文看看(大概几百篇的,我只看了一点点,呵呵)。
  2. 平时扫扫zoj上的难题啦,别老做那些不用想的题.(中大acm的版主经常说我挑简单的来做:-P )
  3. 多参加网上的比赛,感受一下比赛的气氛,评估自己的实力.
  4. 一道题不要过了就算,问一下人,有更好的算法也打一下。
  5. 做过的题要记好
    逻辑类:枚举、贪心、动态规划、深搜广搜
    结构类:栈、并查集、堆、树、拓扑图、图论
    几何类:凸包
    公式类:Fibonacci,排列组合,概率
    几何类的小算法很多,比如求点线关系;还有线性方程组、最大最小流;还有一些特定的算法:最短路径、排序等。

我感觉最其中重要的是搜索,搜索可以对大部分问题提供通解,但会有效率问题,于是有双向广搜、A星搜索等等。在现实应用中,我觉得相对其他一些来讲,搜索也是比较有用的。

ACM 中常用的算法有哪些?相关推荐

  1. ACM 中常用的算法有哪些? 2014-08-21 21:15 40人阅读 评论(0) 收藏...

    ACM 中常用的算法有哪些?作者: 张俊Michael 网络上流传的答案有很多,估计提问者也曾经去网上搜过.所以根据自己微薄的经验提点看法. 我ACM初期是训练编码能力,以水题为主(就是没有任何算法, ...

  2. Spark中常用的算法

    Spark中常用的算法: 3.2.1 分类算法 分类算法属于监督式学习,使用类标签已知的样本建立一个分类函数或分类模型,应用分类模型,能把数据库中的类标签未知的数据进行归类.分类在数据挖掘中是一项重要 ...

  3. GIS开发中常用几何算法原理图解

    转自:OSGeo中国中心 http://www.osgeo.cn/post/ae457 计算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简 ...

  4. js中常用的算法排序

    在工作中都会经常用到的一些基础算法,可以很快解决问题.这些都是在工作中总结的,希望可以帮助到大家. 一.数组乱序 arr.sort(function randomsort(a, b) {return ...

  5. 游戏开发中常用的算法

    内容会持续更新,有错误的地方欢迎指正,谢谢! 1.与数组相关的算法: 快速排序(分治思想的应用):不是任何情况都适用,数据量小的话,还不如冒泡快,但快排的确很优秀. 堆排序:可用于做游戏排行榜前多少多 ...

  6. java开发中常用的算法_总结一下项目开发过程中常用的到的一些加密算法。

    一般常用的有: MD5.SHA算法:代码如下 Java代码 /* * Copyright (c) 2008 * All rights reserved. */ packagecn.com.jody.w ...

  7. 游戏开发中常用的算法1(20道题一篇文章)

    一.快速排序算法 步骤1:选取一串数字中的中心轴 步骤2:将大于中心轴的数字放在右边 步骤3:将小于中心轴的数字放在左边 步骤4:分别对左右两个序列重复前三步操作 public class Quick ...

  8. web开发中常用的算法和函数

    1.isFinite() 函数用于检查其参数是否是无穷大. isFinite(number) 返回值 如果 number 是有限数字(或可转换为有限数字),那么返回 true.否则,如果 number ...

  9. ACM比赛常用技巧算法

    1.从前到尾!找间隔距离 在程序设计竞赛中,我们会遇到这样一个问题,在一个有序序列中,任取其中的几个点(前提是小于序列的长度),求他们之间的最大间隔距离, 利用下面的代码+二分查找 void solv ...

最新文章

  1. Wireshark网络抓包(三)——网络协议
  2. yxw.Permission.init
  3. 用Python解“支票问题”题
  4. 程序员之天梯排行榜 | 每日趣闻
  5. 2022年全球及中国工业用真空电缆行业十四五产能需求与投资战略研究报告
  6. 【高效JDBC编程工具JadePool快速入门】
  7. Eclipse:Target runtime XXX is not defined
  8. java技术系列(一) Enum
  9. perl 调用 shell 文件 防止出问题,最好写绝对路径
  10. 求助:字符的显示问题
  11. [转载]未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。
  12. Memcached详解
  13. 微信隐藏功能盘点:修复聊天记录
  14. 如何用css只做一个div鼠标点击变色
  15. Excel的图表:组成元素、图表类型与用途、图表可视化大全
  16. 解决html2canvas截图空白的问题
  17. 令人肝肠寸断的100个签名
  18. [转]关于计算机研究生报考方向的简要介绍
  19. Python制图常用设置
  20. NAACL同传Workshop:千言 - 机器同传

热门文章

  1. 链表问题13——删除无序单链表中值重复出现的节点
  2. jeecg富文本编辑器增加字体(仿宋)
  3. Android Gradle 笔记
  4. CoreAnimation —— CATransaction(隐式动画)
  5. xtragrid 上移下移
  6. leetcode位运算的题
  7. HTML用cookie实现自动登录,用cookie实现websocket自动登录,session状态保留。
  8. sqlserⅴer随机函数_SQL server 随机数函数
  9. 大数据之Python入门语法基础
  10. dft变换的两幅图_离散傅立叶变换DTFT、DFT和FFT在工程与数学结合的通俗理解