看《算法导论》的一点感想

来源:互联网 发布:学java以后工作干什么 编辑:程序博客网 时间:2024/05/01 19:25
说实话,我没把那书看完,甚至没有看过1/10,至于做题就更没谱了,只要不是有人提起,我根本不知道哪个题居然在算导(下文简写成clrs)中出现过,但是我还要写一下我对这书的心得,看法和感受,尤其是和找工作的关系,供大家分享。
 
1.为什么看这本书?个人认为是为了学习解决计算机科学普遍问题的方法论。该书的名称就是“导论”,本质上没讲几个算法,而是把900多页(我手头的电子版本)的篇幅都用在了算法证明,推导,分析上了,这些过程才是clrs希望大家掌握的知识,因为这些知识可以帮你分析远远超过clrs本身的知识体系。这里,大多数同学认为,我不想了解这些玩意,我看clrs,就是为了了解尽可能多算法,其实如果只有这一个目的,给大家推荐一个我经常翻来翻去的一本“书”:《吉大模板》,该书抛弃了clrs中的一切废话,将远远超越clrs容量的,以少/错一个字都不行的文本描述了大量基础算法。注意:这本书和类似的《浙大模板》(规模更大),《交大模板》(鬼畜版算法集合)在ACM/ICPC是可以带进场内自由翻阅的,想想为什么一个竞赛在允许这样的同时还受世界各大计算机公司的青睐?
 
2.虽然凭大家的智商,硬啃本书没问题,但还是建议看本书之前,先把大学相关科目复习一遍。《离散数学》是必须要完全搞定的,要不算法分析部分会让你很抓狂。《数据结构》可以提前剧透clrs的一些基础内容,刚考研的同学们有福了。如果你在本科时选修过组合数学,运筹学等,特定章节你是完全可以直接跳过的,因为你当时学的东西比clrs上那点详细多了。另外,《概率论》,《高数/数分》,《形式语言&自动机》也会有直接的间接的帮助。如果你在大学时不是一心为了刷狗日的保研分,而是认认真真的把上面这些玩意学好,那看clrs基本就是玩票级轻松。
 
3.为了让自己能答上面试的算法题(不管是下周还是3年后)而看这书的,希望你们考虑下,clrs给你带来了什么?3年前,如果你知道第K大还有O(N)的算法,3-sum还有O(N^2)的,基本上去百度是没啥问题了,但随着这几年程序员面试宝典之类的玩意泛滥,是个CS人就能答的上上面两个问题,面试管问的问题就水涨船高了,具体表现并不是问些clrs上没有的算法,而是clrs上算法的证明,组合和应用(当然狗搜还不厚道的搞起了TAOCP,操他妈的)。或是干脆不问算法了,改问分布式之类的新东西,如果你数据库学的很深,map/reduce或各种NoSQL上的那些深层次的优化你也可以讲出个大概。总之,不要希望穷举面试官的问题,clrs提供的问题真的不够问。如果说clrs对面试有什么效果,我希望它能帮助你提高自己的分析能力。面试官想看到的是解决问题的能力,不是问题的答案。不要怕面试官考你原题你不会,我实习的时候,经理和我聊起面试的应试策略,经理说,即使你搞不定某个题,如果你能提供个清晰的思路,效果要比你直接给出正确答案好得多,当然他也提到了,现在校招的难度比较高,人人都看过算法宝典,基本的算法题都会背,严重影响了算法本身的考察能力。
 
4.亲自动手做课后题绝对是个好方案,当然今天做的明天就可以忘了,关键是,这些题都是精心设计的,为的是训练你的算法分析能力,既然训练到位了,还记得题目本身干什么?原因参见3。
 
5.我个人只用clrs当工具书,如果某人提了个算法,我发现我对它的正确性证明,复杂度证明并不了解,我回抽出时间去认真看一章。但我没毅力去完全翻一遍。
 
6.看英文版的clrs没比中文版的多出多少时间,因为大多数时间你都耗在思考问题上了,中英文的差异可以忽略不计。在这说个例子,我的队友,高中搞过OI,一些解题报告都是直接看波兰文的,不是因为会波兰文,而是波兰人写报告很喜欢用数学方法描述,看不懂波兰文,总能看懂公式把?当然基本的还是要懂的,例如TAK,NIE是啥玩意。
 
7.学习clrs是有超级捷径的,但是没人会向你明示,因为让你浪费大量时间研读此书,他就可以抽出时间做别的事,获得很高的学习效率,取得竞争优势。学习效率是一个人的核心竞争力。希望你看到这个提醒,可以利用国际互联网探索下这个“超级捷径”是什么。
0 0
原创粉丝点击