大牛给的ACM进阶建议

转:https://blog.csdn.net/mmy1996/article/details/56011084

 


来自知乎

在他后面的回答中发现 不用IDE ,修炼内功挺好的,不过他和我的以前的那种 用 潜意识写代码 挺相似的

 

一位高手的建议:

一般要做到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.判断点在多边形内。
9. 差分约束系统.
10. 双向广度搜索、A*算法,最小耗散优先.

第三阶段:
前两个阶段是打基础,第三阶段是锻炼在比赛中可以快速建立模型、想新算法。这就要平时多做做综合的题型了。
1. 把oibh上的论文看看(大概几百篇的,我只看了一点点,呵呵)。
2. 平时扫扫zoj上的难题啦,别老做那些不用想的题.(中大acm的版主经常说我挑简单的来做:-P )
3. 多参加网上的比赛,感受一下比赛的气氛,评估自己的实力.
4. 一道题不要过了就算,问一下人,有更好的算法也打一下。
5. 做过的题要记好 :-)

下面转自:http://hi.baidu.com/wilworld/blog/item/88b1b844d37e4049500ffe6a.html

算法书有很多可以参考:

1、Concrete Mathematics — A Foundation For Computer Science
Ronald L. Graham , Donald E. Knuth , Oren Patashnik
  这本书《具体数学》是Stanford计算机系的教材(1970 年开始给研究生授课),书的内容是Knuth的巨著TAOCP第一章的扩展,涉及了计算机科学领域内几乎所有可能遇到的数学知识。书中许多经典问题的解答比目前广泛流传的解法更易懂。对于提高大家的数学修养有很大帮助。

2、Introduction to Algorithms
Thomas H. Cormen ,Charles E. Leiserson ,Ronald L. Rivest ,Clifford Stein
  《算法导论》MIT计算机系的经典算法教材。作者Rivest获得过ACM Turing Award,牛!本书内容全面,语言通俗,很适合大家入门。

3、实用算法的分析和程序设计
吴文虎 王建德
  大名鼎鼎的“黑书”。内容包括了竞赛需要的各种算法,各种层次的读者都适合。

【这里是我自己加的:其实所谓”黑书”,还有一本,《算法艺术与信息学竞赛》作者:刘汝佳 黄亮,很经典,很流行】
4、网络算法与复杂性理论
谢政 李建平
  内容很丰富的图论教材

5、算法+数据结构=程序
N.Wirth
  Pascal语言的发明人Wirth教授的名著,深入阐述了算法与数据结构的关系,对每个算法都提供详细的Pascal源程序,适合各种水平的读者。

  最后,在学习算法提升战斗力的同时,也要多做题目,实战是很有必要的。其实并不是所有的题目都是靠算法的,有一些题目是有多种可以优化的手段,也有一些工程性比较强的题目。上手做和把题做精还是有很大区别的(惭愧的说,我就是属于上手做,没有做精,所以……)。

  愿每一位程序设计竞赛爱好者挑战极限!

=============================================================================
ACMer必备知识(任重而道远……)

图论

路径问题
0/1边权最短路径
BFS
非负边权最短路径(Dijkstra)
可以用Dijkstra解决问题的特征
负边权最短路径
Bellman-Ford
Bellman-Ford的Yen-氏优化
差分约束系统
Floyd
广义路径问题
传递闭包
极小极大距离 / 极大极小距离
Euler Path / Tour
圈套圈算法
混合图的 Euler Path / Tour
Hamilton Path / Tour
特殊图的Hamilton Path / Tour 构造

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
28
29
30
31
32
33
34
35
36
37
38
39
40
生成树问题
    最小生成树
    第k小生成树
    最优比率生成树
    0/1分数规划
    度限制生成树
 
连通性问题
    强大的DFS算法
    无向图连通性
        割点
        割边
        二连通分支
        有向图连通性
        强连通分支
        2-SAT
        最小点基
 
有向无环图
    拓扑排序
        有向无环图与动态规划的关系
 
二分图匹配问题
    一般图问题与二分图问题的转换思路
    最大匹配
        有向图的最小路径覆盖
        0 / 1矩阵的最小覆盖
    完备匹配
    最优匹配
    稳定婚姻
 
网络流问题
    网络流模型的简单特征和与线性规划的关系
    最大流最小割定理
    最大流问题
        有上下界的最大流问题
            循环流
    最小费用最大流 / 最大费用最大流
 
弦图的性质和判定

组合数学

1
2
3
4
5
解决组合数学问题时常用的思想
    逼近
    递推 / 动态规划
概率问题
    Polya定理

计算几何 / 解析几何

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
28
计算几何的核心:叉积 / 面积
解析几何的主力:复数
 
基本形
    
    直线,线段
    多边形
 
凸多边形 / 凸包
    凸包算法的引进,卷包裹法
 
Graham扫描法
    水平序的引进,共线凸包的补丁
 
完美凸包算法
 
相关判定
    两直线相交
    两线段相交
    点在任意多边形内的判定
    点在凸多边形内的判定
 
经典问题
    最小外接圆
        近似O(n)的最小外接圆算法
    点集直径
        旋转卡壳,对踵点
    多边形的三角剖分

  

最大公约数
Euclid算法
扩展的Euclid算法
同余方程 / 二元一次不定方程
同余方程组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
线性方程组
    高斯消元法
        解mod 2域上的线性方程组
    整系数方程组的精确解法
 
矩阵
    行列式的计算
        利用矩阵乘法快速计算递推关系
 
分数
    分数树
    连分数逼近
 
数论计算
    求N的约数个数
    求phi(N)
    求约数和
    快速数论变换
    ……
 
素数问题
    概率判素算法
    概率因子分解

数据结构

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
组织结构
    二叉堆
    左偏树
    二项树
    胜者树
    跳跃表
    样式图标
    斜堆
    reap
 
统计结构
    树状数组
    虚二叉树
    线段树
        矩形面积并
        圆形面积并
 
关系结构
    Hash表
    并查集
        路径压缩思想的应用
 
STL中的数据结构
    vector
    deque
    set / map

  

动态规划 / 记忆化搜索

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

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
组织结构
    二叉堆
    左偏树
    二项树
    胜者树
    跳跃表
    样式图标
    斜堆
    reap
 
统计结构
    树状数组
    虚二叉树
    线段树
        矩形面积并
        圆形面积并
 
关系结构
    Hash表
    并查集
        路径压缩思想的应用
 
STL中的数据结构
    vector
    deque
    set / map

  

线性规划

常用思想

1
2
二分
最小表示法

1
2
3
4
5
KMP
Trie结构
后缀树/后缀数组
LCA/RMQ
有限状态自动机理论

排序 

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

posted @   dreamw  阅读(281)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示