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

来源:互联网 发布:淘宝日用杂货铺 编辑:程序博客网 时间:2024/05/17 03:40
《算法概论》短小精悍,别据一格,准经典之作。一个坏消息: 同算法导论,该书没有习题答案。好消息:习题很经典,难度也适中,只需花点点时间自己也都能做出来。这是英文版《Algorithms》S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani-Algorithms Copyright c 2006 S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani July 18, 2006

1. Algorithm Design 算法设计
很经典的一本书,很久之前看的,遗憾的是现在除了就记得它很经典之外其它都忘光了。


2. SICP 计算机程序的构造和解释
六星之书无需多言,虽然这不是一本讲算法的书,但看完此书有助于你更深入的理解什么是递归。我一直很强调习题,看完此书后你至少应该做完前四章的太部分习题。否则那是你的遗憾,也是作者的遗憾。


3. Concrete Mathematics 具体数学 
有人说看TAOCP之前应该先弄清楚这本书的内容,要真是如此的话那我恐怕是看不到TAOCP了。零零碎碎的看了一大半,很多东西都没有时间来好好消化。如果你是刚进大学不久的本科生,有着大把的可自由支配时间,那你幸运又幸福了,花上几个月时间好好的读一下此书吧,收获绝对大于你的期望值。


4. Introduction to The Design and Analysis of Algorithms 算法设计与分析基础
很有趣的一本算法书,有许多在别的书上找不到的趣题,看完此书绝对能让你大开眼界,实在是一本居家旅行,面试装逼的必备佳作。


5. 编程之美--微软技术面试心得 
虽说是一本面试书,但如果把前面十几页扯掉的话,我更愿意把它看作是一本讲解题思维的算法小品。在书中,作者通常是给出一个平常解法,然后再一次又一次的优化改进,你可以很清楚的看到基本的算法设计思想是如何得到运用以解决实际问题的。如果你已经有了一些算法的基础,看完本书应该能使你的算法应用能力得到一定的提高。另外,本书生动有趣,也同样适合于初学者。


6. Fundamentals of Algorithmics 算法基础 
也是很久之前在学校图书馆借来看的,内容记不太清楚了,只隐约记得此书的动态规划章节犹为出彩。应该是很经典的一本书,个人以为足以和算法导论等所谓当世经典平分秋色,但是怎么好像被人提到的不多,或许是我孤陋寡闻了。


7. How to solve it 怎样解题
二十世纪最伟大的数学思想家之一波利亚的力作,讲一般性的解题方法:怎么认识问题,怎么转换问题,怎么解决问题,如何在问题中得到启发,如何找到一个通往答案的方向。


8. Programming interviews exposed 程序员面试攻略
一本消遣之作。个人以为要比国内的某“XXX面试宝典”纯粹一些,至少也有一些启发性的内容,而不单单是面试题解库。


9. Programming Pearls 编程珠玑
学习算法不仅需要像Alogrithms,算法导论这样的重量级的内功心法,像《编程之美》、《编程珠玑》这样的轻量级的轻功身法也必不可少。前些年网上不是很流行像“给你10亿个数,找到最大的n个”或者“给你10亿个数,找出现次数最多的那个数”之类的百度面试题吗?看了此书你就知道怎么解决了。相比于《编程之美》来说,本书中的示例技巧性略低一些,但是也更有实际应用价值一些。


10. 算法艺术与信息学竞赛 
如果算法导论是九阳神功,那这本无疑就是九阴真经。本书是专为参加一些诸如ACM之类程序设计比赛的同学而写的,江湖人称“黑书”。里面讲的都是一些在编程比赛中常用的算法、数据结构,以及一些数论和计算几何等。我虽然并不搞竞赛,但也从此书中受益颇多。


11. An Introduction to Probability Theory and Its Applications
准备看的,现在才发现概率论有多么重要,可惜本科的时候没有好好学。前不久一个同学问我个问题,我半天弄了一个程序给他,他说:这里就不是相关系数么,Excel一下就完事!我晕,我还真不知道那就是相关系数。


12. Numerical Analysis
这本的作者是Richard L. Burden,J. Douglas Faires 
数值分析,讨论各种数值算法,比如插值、拟合、积分、微分方程的求解、线性和非线性方程组求解等。准备详细看。


13. TAOCP 计算机程序设计艺术
传说中的TAOCP,说的人多,看的人少。TAOCP四卷堪称是算法藏经阁中的易筋经或者是少林七十二绝技。天下武学,尽出少林,天下算法,尽出TAOCP 也。这点你可以顺便翻开一本算法书看看他的引用文献就知道了。我只读了第四卷的部分章节,前三卷暂时还没敢看,还在读书计划表中被无限期搁置。
====================
ACM基本算法分类、推荐学习资料和配套pku习题




一.动态规划


参考资料:


刘汝佳《算法艺术与信息学竞赛》《算法导论》


推荐题目:


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


简单,矩阵快速乘法
=================
年轻时应该养成的十大好习惯
一个好习惯可以让自己享受一辈子
1.守时
买个闹钟,以便按时叫醒你。贪睡和不守时,都将成为你工作和事业上的绊脚石,任何时候都一样。不仅要学会准时,更要学会提前。就如你坐车去某地,沿途的风景很美,你忍不住下车看一看,后来虽然你还是赶到了某地,却不是准时到达。"闹钟"只是一种简单的标志和提示,真正灵活、实用的时间,掌握在每个人的心中。
2.不要扭扭捏捏
如果你不喜欢现在的工作,要么辞职不干,要么就闭嘴不言。初出茅庐,往往眼高手低,心高气傲,大事做不了,小事不愿做。不要养成挑三拣四的习惯。不要雨天烦打伞,不带伞又怕淋雨,处处表现出不满的情绪。记住,不做则已,要做就要做好。
3.忍受孤独
每个人都有孤独的时候。要学会忍受孤独,这样才会成熟起来。年轻人嘻嘻哈哈、打打闹闹惯了,到了一个陌生的环境,面对形形**的人和事,一下子不知所措起来,有时连一个可以倾心说话的地方也没有。这时,千万别浮躁,学会静心,学会忍受孤独。在孤独中思考,在思考中成熟,在成熟中升华。不要因为寂寞而乱了方寸,而去做无聊无益的事情,白白浪费了宝贵的时间。
4.要着眼未来
走运时要做好倒霉的准备。有一天,一只狐狸走到一个葡萄园外,看见里面水灵灵的葡萄垂涎欲滴。可是外面有栅栏挡着,无法进去。于是它一狠心绝食三日,减肥之后,终于钻进葡萄园内饱餐一顿。当它心满意足地想离开葡萄园时,发觉自己吃得太饱,怎么也钻不出栅栏了。相信任何人都不愿做这样的狐狸。退路同样重要。饱带干粮,晴带雨伞,点滴积累,水到渠成。有的东西今天似乎一文不值,但有朝一日也许就会身价百倍。
5.学会坚强
不要像玻璃那样脆弱。有的人眼睛总盯着自己,所以长不高看不远;总是喜欢怨天尤人,也使别人无比厌烦。没有苦中苦,哪来甜中甜?不要像玻璃那样脆弱,而应像水晶一样透明,太阳一样辉煌,腊梅一样坚强。既然睁开眼睛享受风的清凉,就不要埋怨风中细小的沙粒。
6.管住自己的嘴巴
管住自己的嘴巴。不要谈论自己,更不要议论别人。谈论自己往往会自大虚伪,在名不副实中失去自己。议论别人往往陷入鸡毛蒜皮的是非口舌中纠缠不清。每天下班后和你的那些同事朋友喝酒聊天可不是件好事,因为,这中间往往会把议论同事、朋友当做话题。背后议论人总是不好的,尤其是议论别人的短处,这些会降低你的人格。
7.把握机遇
机会从不会"失掉",你失掉了,自有别人会得到。不要凡事在天,守株待兔,更不要寄希望于" 机会"。机会只不过是相对于充分准备而又善于创造机会的人而言的。也许,你正为失去一个机会而懊悔、埋怨的时候,机会正被你对面那个同样的"倒霉鬼"给抓住了。没有机会,就要创造机会,有了机会,就要巧妙地抓住。
8.学会与人沟通
若电话老是不响,你该打出去。很多时候,电话会给你带来意想不到的收获,它不是花瓶,仅仅成为一种摆设。交了新朋友,别忘了老朋友,朋友多了路好走。交际的一大诀窍就是主动。好的人缘好的口碑,往往助你的事业更上一个台阶。
9.重视爱情
千万不要因为自己已经到了结婚年龄而草率结婚。想结婚,就要找一个能和你心心相印相辅相携的伴侣。不要因为放纵和游戏而恋爱,不要因为恋爱而影响工作和事业,更不要因一桩草率而失败的婚姻而使人生受阻。感情用事往往会因小失大
10.写备忘录
写出你一生要做的事情,把单子放在皮夹里,经常拿出来看。人生要有目标,要有计划,要有提醒,要有紧迫感。一个又一个小目标串起来,就成了你一生的大目标。生活富足了,环境改善了,不要忘了皮夹里那张看似薄薄的单子。