美文网首页算法ACMacm
ACM算法分类、推荐学习资料和配套习题

ACM算法分类、推荐学习资料和配套习题

作者: FinlayLiu | 来源:发表于2015-09-10 06:44 被阅读1416次

    相信每一位玩ACM程序设计竞赛的同学来说,都有一个从入门到精通的过程,而且分享他们经验的时候,见到最多的就是一种合作和拼搏精神,乐在其中的那种激情。

    Wilbert即将毕业,作为一个菜鸟级的入门玩家,一直很想知道如何能在程序设计竞赛中成为一个高手。即将无缘类似竞赛的我,终于整理出了一些程序设计竞赛ACM训练之道,愿与大家分享。

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

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

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

    4、网络算法与复杂性理论谢政 李建平  
    内容很丰富的图论教材

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

    一.动态规划

    参考资料:
    刘汝佳《算法艺术与信息学竞赛》《算法导论》
    推荐题目:
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1141
    简单
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2288
    中等,经典TSP问题
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2411
    中等,状态压缩DP
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1112
    中等
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1848
    中等,树形DP。可参考《算法艺术与信息学竞赛》动态规划一节的树状模型
    http://acm.zju.edu.cn/show_problem.php?pid=1234
    中等,《算法艺术与信息学竞赛》中的习题
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1947
    中等,《算法艺术与信息学竞赛》中的习题
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1946
    中等,《算法艺术与信息学竞赛》中的习题
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1737
    中等,递推
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1821
    中等,需要减少冗余计算
    http://acm.zju.edu.cn/show_problem.php?pid=2561
    中等,四边形不等式的简单应用
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1038
    较难,状态压缩DP,《算法艺术与信息学竞赛》中有解答
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1390
    较难,《算法艺术与信息学竞赛》中有解答
    http://acm.pku.edu.cn/JudgeOnline/problem?id=3017
    较难,需要配合数据结构优化(我的题目_
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1682
    较难,写起来比较麻烦
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2047
    较难
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2152
    难,树形DP
    http://acm.pku.edu.cn/JudgeOnline/problem?id=3028
    难,状态压缩DP,题目很有意思
    http://acm.pku.edu.cn/JudgeOnline/problem?id=3124

    http://acm.pku.edu.cn/JudgeOnline/problem?id=2915
    非常难

    二.搜索

    参考资料:
    刘汝佳《算法艺术与信息学竞赛》
    推荐题目:
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1011
    简单,深搜入门题
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1324
    中等,广搜
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2044
    中等,广搜
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2286
    较难,广搜
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1945
    难,IDA,迭代加深搜索,需要较好的启发函数
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2449
    难,可重复K最短路,A
    。可参考解题报告:
    http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1144
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1190
    难,深搜剪枝,《算法艺术与信息学竞赛》中有解答
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1084
    难,《算法艺术与信息学竞赛》习题
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2989
    难,深搜
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1167
    较难,《算法艺术与信息学竞赛》中有解答
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1069
    很难

    三. 常用数据结构

    参考资料:
    刘汝佳《算法艺术与信息学竞赛》
    《算法导论》
    线段树资料:
    http://home.ustc.edu.cn/~zhuhcheng/ACM/segment_tree.pdf
    树状数组资料
    http://home.ustc.edu.cn/~zhuhcheng/ACM/tree.ppt
    关于线段树和树状数组更多相关内容可在网上搜到
    后缀数组资料
    http://home.ustc.edu.cn/~zhuhcheng/ACM/suffix_array.pdf
    http://home.ustc.edu.cn/~zhuhcheng/ACM/linear_suffix.pdf
    推荐题目
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2482
    较难,线段树应用,《算法艺术与信息学竞赛》中有解答
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1151
    简单,线段树应用矩形面积并,《算法艺术与信息学竞赛》中有解答
    http://acm.pku.edu.cn/JudgeOnline/problem?id=3225
    较难,线段树应用,可参考解题报告
    http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1233
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2155
    难,二维树状数组。
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2777
    中等,线段树应用。
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2274
    难,堆的应用,《算法艺术与信息学竞赛》中有解答
    http://acm.zju.edu.cn/show_problem.php?pid=2334
    中等,左偏树,二项式堆或其他可合并堆的应用。
    左偏树参考 http://www.nist.gov/dads/HTML/leftisttree.html
    二项式堆参见《算法导论》相关章节
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1182
    中等,并查集
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1816
    中等,字典树
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2778
    较难,多串匹配树
    参考: http://home.ustc.edu.cn/~zhuhcheng/ACM/zzy2004.pdf
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1743
    难,后缀数组
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2774
    较难,最长公共子串,经典问题,后缀数组
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2758
    很难,后缀数组
    可参考解题报告
    http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1178
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2448
    很难,数据结构综合运用

    四.图论基础

    参考资料:
    刘汝佳《算法艺术与信息学竞赛》《算法导论》《网络算法与复杂性理论》谢政
    推荐题目:
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2337
    简单,欧拉路
    http://acm.pku.edu.cn/JudgeOnline/problem?id=3177
    中等,无向图割边
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2942
    较难,无向图双连通分支
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1639
    中等,最小度限制生成树,《算法艺术与信息学竞赛》中有解答
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2728
    中等,最小比率生成树,《算法艺术与信息学竞赛》中有解答
    http://acm.pku.edu.cn/JudgeOnline/problem?id=3013
    简单,最短路问题
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1275
    中等,差分约束系统,Bellman-Ford求解,《算法艺术与信息学竞赛》中有解答
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1252
    简单,Bellman-Ford
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1459
    中等,网络流
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2391
    较难,网络流
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1325
    中等,二部图最大匹配
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2226
    较难,二部图最大匹配
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2195
    中等,二部图最大权匹配
    KM算法参考《网络算法与复杂性理论》
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2516
    较难,二部图最大权匹配
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1986
    中等,LCA(最近公共祖先)问题
    参考Tarjan's LCA algorithm 《算法导论》第21章习题
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2723
    较难,2-SAT问题
    参考:http://home.ustc.edu.cn/~zhuhcheng/ACM/2-SAT.PPT
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2749
    较难,2-SAT问题
    http://acm.pku.edu.cn/JudgeOnline/problem?id=3164
    较难,最小树形图
    参考《网络算法与复杂性理论》中朱-刘算法

    五.数论及组合计数基础

    http://acm.pku.edu.cn/JudgeOnline/problem?id=1811
    简单,素数判定,大数分解
    参考算法导论相关章节
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2888
    较难,Burnside引理
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2891
    中等,解模方程组
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2154
    中等,经典问题,波利亚定理
    http://cs.scu.edu.cn/soj/problem.action?id=2703
    难,极好的题目,Burnside引理+模线性方程组
    http://acm.pku.edu.cn/JudgeOnline/problem?id=2764
    较难,需要数学方法,该方法在《具体数学》第七章有讲
    http://acm.pku.edu.cn/JudgeOnline/problem?id=1977
    简单,矩阵快速乘法

    转载自CSDN-ACM基本算法分类、推荐学习资料和配套习题

    相关文章

      网友评论

      本文标题:ACM算法分类、推荐学习资料和配套习题

      本文链接:https://www.haomeiwen.com/subject/bfdpcttx.html