我已经看完《算法导论》很久了,不接触算法也很久了。也没有《算法导论》的习题解答。
容我先吼一句:孩子,醒醒吧,那都是骗人的!!!
老子都看完算法导论了,还不是一样做着前端的外包,还不是合同到期直接滚了。。。算法酷炫一点有什么用,比大数据部门的一部分人厉害又有什么用,还不是个被裁的命!!!
------------------------------吼完,舒坦多了----------------------------------
----------------------------以下是楼主黑化史---------------------------------
今年5月21日
实习期,同事的一句玩笑话促成了我买下这本《算法导论》。过了今晚,正好算半年吧。
回顾一下:经过半年的努力,我基本算是读完了算法导论。全书除掉附录和索引,全部看完,题目一共1115道,一共有8道题算是没有完成。。。8道里面有2道是概念不懂,比如34.5-2,那个“一元形式”我就没看懂。。还有3道是结论和题设不一样,如35-6的d小题,感觉是S和T写反了。。还有3道是自己没有做出来,也没时间做了,分布在第28章的第二个小节的附带小题目中。。因为我再过一个月就要失业了,不能再陪那几题耗下去了,明天开始复习一下设计模式,ios代码,数据库之类的。。。综合下来完成度在99%以上吧。。
刚开始我受了网络评论以及自己内心的怂恿,以为看完这本书就能飞上枝头变凤凰,毅然决然地边工作,边每晚10~12点半,以及周六日无休看这本书。。。开始的那一两个月满是激情,因为今年本科毕业,5,6月份是实习,那个激情的,自己赚钱啦,白天工程代码,晚上科学算法,太完美了。。
但从7月份开始我开始黑化,因为,公司部门调整,我的部门要没了,部门的老员工陆续离职,因为本身也就是干外包的,再加上本人是前端,再加上,我这个刚毕业就要失业。。。幸亏部门的外包合同是到年底,给了我一点喘息的机会,至少到年底才裁员。。哈哈,我加快了脚步看这本书。。。不过内心已经开始黑化。
到了10月份以后,由于离被裁的时间越来越近,部门的有点本事的老员工也走的差不多了,就剩下几个老弱病残和我这类刚毕业的小苗子。。应付着外包的合同。。。我已经不在乎自己能不能变成凤凰了,只希望善始善终,给自己一个装B的理由。。于是继续攻打着后面的那些变态章节。
昨天终于算看的差不多了,能做的部分基本都做了,少部分遗留题目,我也就只能算了。。我去买了本设计模式的书看一看,希望能够,裁了后找个月薪不比现在外包低的岗位,八千以上最好。。。
不过这本书最大的好处就是能够让我装B,想着,那些同一楼层的高学历大数据员工,鄙视我们这些本科外包人员时,我能够回击他们,能够在算法上虐他们中的一部分。。。我被裁时,能够吼一句:“你们这些渣渣,水平都没有我高,竟然敢瞧不起我,渣渣,裁了我是你们的损失”。。。。哈哈,想想还有点小激动呢。。。
要是看着MIT这个名号,老子纯自学,花了半年就干的差不多了,老子要是有命去MIT,将来也是大神。。。。各种YY。
至此,楼主彻底黑化。
---------------------------关于楼主的能力----------------------------------
本科毕业,大学的《离散数学》,《高等数学》《线性代数》,都是一般般的分数,
大学时,愤青,没本事却高傲指责国内教育,然后看了本《什么是数学》平衡心理。算法导论之前,上过《数据结构》这个课,然后,在POJ做了两个月的ACM入门题。。。然后学了一些java,包括《30天自制操作系统》以及《JAVA编程思想》。。当然工作需要的IOS的一点OC代码。。。也算有一定的代码量。
---------------------------正能量PS:学习心得----------------------------
下面是本人在知乎的一个回答,完善版本:
0.孩子醒醒吧,我看完了还不是个外包被裁员的命。。
1.英文版和中文版的差别不大,算法导论的翻译绝对是可以的,当然的确有部分明显的错误,不过基本都是非常明显的打印错误,少部分的翻译错误也是很容易判别的,绝对不会影响阅读。。。如果你中文版看不懂,那么基本看英文也是一个结果,该不懂的还是不懂,某些人可能是因为中文版没看懂,然后断定中文版翻译有问题,这样就可以掩盖自己的水平缺陷,达到自欺欺人的效果。。。占比很小的翻译错误可以临时对照pdf的英文版。。。。。总之,没有必要特意看英文版。。。
2.没有算法基础的同学,尤其是连数组,堆栈,二叉树的遍历,几个基本排序算法的代码都写不出来的同学,别看这本书。。。虽然这本书也会提这些东西,但是,它基本是做个引子,然后引入更深的东西。。。就好比,小学数学没学好,直接去学大学数学一样。。。所以先从小学数学学起(先学一本最基础的数据结构)。
3.如果浏览目录发现一半以上的东西是完全没见过的,那么在第2条的基础上,去poj练一两个月,把网络流的基本算法步骤,凸包,并查集,线段树,贪心动态规划,逆序数,以及基本的数论算法之类的东西给补上。。。不然就好比,高中毕业的你直接看《苔丝》之类的英文小说一样,一段话里面有二三十个单词不认识,临时去查,去标记,特别痛苦。。根本享受不了小说的气氛和韵味。
4.在做好2.3的基础上,如果乐于探究算法的原理,想知其然并知其所以然,而且又有很多时间(几百个小时吧),这样就可以读这本书了。。我读这本书的证明部分是有个比较独特方法:不要把自己当成一个读者,而是一个交流者,和这本书的作者(大师)交流。。比如,它一般是要在做一个大证明之前会先抛出这个证明结论,你看到结论后,如果比较感兴趣,可以先自己试着去探索一下,证明一下,探索几十分钟后,哪怕没有探索出结果,那也是多少有了自己的一点收获,然后带着你的收获再来看这本书的证明,就像你和大师交流一样。。。
5.别把这本书做入门书,说是入门书的人要么就是特别厉害而且特别不负责任的,要么就是啥都不懂的人以为看到“导论”两个字就认为特别基础的人。
6.关于数学,首先必须是大学毕业的,学过高等数学,矩阵和离散数学的,如果没学过这几本,那么里面的东西也真够呛,原因同2。。如果学过但是忘了,那么书的附录部分会有复习,看一下就可以了。。。如果看了还是搞不懂书里面的推理,那么基本就是你可能不太适合读这类书的证明部分,不太适合搞研究。。。仅此而已。。。
7.要想完成度比较高的话,还需要不怕死的精神。比如那个斐波那契堆,vEB树,网络流的证明部分,还有NP那一章节的证明,看着特别唬人,其实只要不怕死,硬着头皮一行一行啃,其实也能过,而且后面的题目却不算难。。。
8.小马过河的典型案例,小马过河,在硬是“不走桥”这个前提下。算法导论很有这个意味。。。老牛说比较浅,松鼠说很深,真正我自己淌过去的时候才发现不是很深也不是很浅。。。。。。想起大学的日语N1的高分之日,以及托业900的笑傲之时,都一样的。。。
9 .算法导论本身内部有很多明的或者暗的承接关系,明显的证明之间互相引用的承接关系我就不讲了,暗的承接关系比较有意思。比如12章开始,二叉树是2叉的东西,13章补充,14章扩张,之后18章是若干叉的B树,19章的logN叉,20章的√N叉,之后习题中补充了n的1/3叉,等等。。1叉就是链表,而N叉就是数组和最初的第10章相对。。。
比如还有一条是斐波那契数,4-4那一题就讲了点。。16章的动态规划的两个思路。19章的斐波那契堆又讲了点,后面的31-3又结合数论讲了些,如果再结合30-1的那题,以及31.1那章节之前的扯淡部分的内容,还能优化。。看了第27章后啥循环都想写成动态多线程的,再优化一次。无穷无尽了。
10 . 对于翻译的补充,12.3-5坑了我好久,严重翻译错误。21.4的讲解里“一个增长非常慢的函数与其增长非常慢的逆函数”,也是一个非常屌的错误。。还有第33章末尾的注记里面,那个“指南针和尺子”作图,也是亮瞎了我的眼。。
11. 有一些题目真的不是努力就可以的,有时还需要灵感,也就是书前言说的创造力。。比如5.1-3。。。很有意思的东西,想出来时,贝叶斯,灵光一闪。。哈哈。装B必备。
12. 读到后面整个人会进入一种奇妙状态,比如读到最短路径,网络流那一章,闭上眼睛整个脑子里就有那些网络啊,流动啊,那个预流就好像一个海湾里一个浪打出去,挤着出湾口出去,没出去的,就被礁石挡回来,来回激荡。。而floyd_warshall就好像一把小石子丢到一个平静的池塘里,千万小涟漪同时向外扩散。。。而负权环,就算是池塘有个无底洞,有个塌陷的大漩涡吧。。。
还有网络流的证明部分,那个最小割和最大流,后面线性规划,也是,两种相辅相成的东西。。镜像一般,一实一虚,虚到实,实到虚,虚实结合。。。好奇妙。。。还有FFT那个美丽的蝴蝶,,等等
有一回在动车上,我在看书,别人问:“你看这些公式怎么不用草稿纸啊。”我回了句:“你知道盲棋吗?”有好多题,其实就是一个比较感性的想法,然后,哈哈,当然不用草稿纸,理性的推理也能建立在感性的想法上,重要的是想法。
后来看附录矩阵部分时,也基本是直接在脑子里完成了递归证明,当时感觉自己屌爆了,么么大。
13. 本人读算法导论时,直接事先在微信朋友圈喊了一句,说要单枪匹马干掉,,然后每个周六都有进展就直播,当我遇到苦难,郁闷地去刷朋友圈时,哈哈,当初那个状态,还有萌妹子点赞呢,瞬间,满血满蓝回归了。。当然,好多时候,脑子会过热,这个时候,冷却与放纵是必须的。
14 本人是双子座,思维跳跃,性格分裂,所以评论也就跳跃与分裂了,哈哈。
------------------------补充分割线-------------------------------
跟评论的人吵起来了。。也是,毕竟这篇满满的负能量嘲讽,阿Q文章,自然会让不少人不满。。算法导论本身也就是一个不上不下的书,说研究性,大数据的那些数据挖掘的博士们可瞧不上这本呢,说工程性,hadoop的工程师们可瞧不起这本呢。说竞赛性,那些ACM国际大奖的人可瞧不起这本呢。
可能某些话不慎得罪了某些人,想想,打了阿Q的某些人如果听到,阿Q说:“儿子打老子”之后,一定还会回来补一拳吧。
我曾经给自己保证过,我哪天真的读完了算法导论,我可以昂首挺胸的离开那家裁我的公司。我做到了。
我现在真觉得我可以在算法部分“虐大数据部门的某些人”,我真这么觉得。。。这本书的知识现在只是我算法能力的一个真子集。读完后的这两个月,我每天仍然都在变强。
-----------------------补充分割线-----------------------------------
下面回复中有不少人关心我的状况,我很菜以至于很多事情都无能为力。这曾经只是个童话而已。
算法算是彻底和我无缘了。
真想找个方向一直干下去,奈何造化弄人,我这一年因为工作的安排,写了下go的并发调度,写了python的爬虫,还搞了点ES。。。毕竟菜,低人一等,只能都答应下来。
算法导论多少还是帮助了我吧,至少我在分析性能相关的模块的时候会更加理性,更加实事求是。。
因为做了一件别人眼里不容易的事情,所以,后面工作胆子就比较大,先喊出来再去做,比如去看个go的运行时然后获取灵感加入到并发调度中,或者去突击下ES和lucene源码写个parser的plugin之类的。。。整个人放的比较开,敢做事,敢做成事,比较有韧性。。。虽然级别还是很低,年限也很低。。。有时自我安慰(吹牛):干一样的活,拿半份工资。诶。。。
前辈,我是一位怀揣梦想的大一学子吧,在一所没落西南地区的211大学(前辈应该能猜到吧)。 排名在计算机系算得上十分靠前吧,有希望保研进入中国一流大学。 梦想是做机器学期方面的科研,不管以后是在工业界还是学术界也好,这都是我的梦想。 大一上学期进入了学校acm校队,校队水平只能说一般吧,银牌都不是年年能有,金牌更是5年没出过了,这使得我在刷了几个月题之后,曾经想在acm竞赛中全身心投入的我有点想退缩了,当然这还只是原因之一,第二个原因就是acm真的需要全身心投入吧,身边做acm竞赛的学生和同学几乎都是工作党,这让我一个保研党很难比他们有更多的时间和精力投入进去。 第三个原因是我以后做的是机器学习方面的科研,acm竞赛是否能为一个科研党提供与投入精力成正比的收益呢? 所以我有点犹豫不定。 我是否应该做一些更有价值的事? 比如从这个暑假开始学习计算机视觉和图像处理,深度学习,神经网络方面的知识? 还是说现在学这些太早了,应该先把算法的基础打好? 另外我也在看算法导论这本书,由于刷过几个月的acm,一些算法大概都有了解,看着还比较流畅。但是我发现做acm,这本书有些东西没必要看,有些东西又太多了,不如直接看acm的书籍和刷题。
那么我现在有几个选择
1、老老实实把算法导论这本书像前辈一样看完,用来打基础。
2、看算法导论中的一部分用的到算法,然后在保证成绩的情况下全身心投入acm竞赛打算法基础和拿奖。
3、全身心投入到未来科研方向知识的学习。
真诚求取前辈的建议。 学弟在此感激不尽。
郭德纲经常会说一句话:但行善事,莫问前程。
人生往往就是这样,不然就成童话了。
当年我也听李开复说了一句,把TAOCP看完来找我。
一气买下三大本TAOCP,结果李开复现在都得癌了我都没看完了。
后来又兴趣转向看了很多别的领域的东西,像经济学社科心理管理等。
看的时候也感觉里面的东西好厉害啊,结果看完发现自己还是那个自己,
真正反过来的时候发现还是理科的东西相对更实在一些。
说了那么多其实希望楼主能坚持下去,
不要期待仅仅一本书就能改变你,
到你面试的时候你的知识储备还是有机会展现的。
另外虽然读了没什么用,
但研究生或博士之类的头衔还是可以吓吓不懂的人的,
有机会还是应该搞一个。
最后列一下我看过的书单:
http://www.douban.co
现在在为了学信息论而在先打基础在学概率论,
不知道楼主又在看什么书了,有兴趣可以加qq群一起聊聊。
华为啊,华为够呛,华为挺看大学的,当时在大连的时候点名不要“非985,211的”,看来你只能读研换学校了。然后华为的上机的笔试题一般,有些算法基础就能高分,倒是那个心理测试有点不讲理,可能人家就要那种老老实实的人吧。。。阿里的话,研究生也没什么用,因为阿里根本不缺一个研究生学位的人,然后面试会面的很难,技术会挖的很深,所有一个点,你需要学得很深,很深。是不是研究生倒无所谓,因为如果你不专研的话,混个研究生,学习的深度也就那样,稍微问下去一点代码层面,或者应用层面的深层次的东西就挂了。。。研究生只是一个幌子,学校的东西真的都很浅,如果不自学点感兴趣的深层次的东西,待几年都是一样的。。。其实计算机重要的两条:1、写代码,2、写了代码之后尝试写更深层次的代码。。。代码的量不够的话,无论如何也是进不了好公司的。
@席尔 以上3条,如果你是1,或者3,你可以去看一些基础的视频(网络上N多),看着跟着写一点,然后如果有点兴趣,可以去买一些入门书(京东啊之类上面有很多入门级别的书),入门级别的书一定是薄的,不要买厚的。然后继续学,边学边写,多练手。慢慢就懂了。。。。如果你是2,那么一定一定要把微积分,矩阵,概率给学好,然后把学校的《数据结构》那本给学通(里面所有的算法都要自己用代码写过一遍),去图书馆借一本最基础的最薄的acm的入门书看看,然后去poj之类的平台刷一些题目,之后,可以看《算法导论》,或者开始看一些机器学习的公开课(网易公开课上面n多),然后跟着做项目。。期间如果有兴趣也可以尝试加入学校的acm战队(你们学校没有的话就算了)。
@席尔,额,这个不好说,看个人情况,1.如果你偏产品(就是你做出来的东西应该具有什么功能,比如你设计一个app,你希望它有什么功能,按钮啊,文本记录啊,或者图片应该是个什么效果,游戏应该有那些场景比较有意思,等等,就是做什么的问题)你可以去学安卓或者ios开发,然后承接一些外包的活,然后,毕业去做产品经理,沟通与感性的东西多一点。。。2.如果你是纯技术,而且是科学数学那方面的话(微积分矩阵,概率,数值处理等),想用起来的话,可以去学一本基础的《数据结构》然后去poj平台刷一些题目,然后《算法导论》或者《机器学习》的公开课。。。3.如果你是纯技术,但不太想做纯研究那个方面的,可以看一些设计模式与架构,跟着写服务端的(java与c++的服务端),然后学多线程啊,hadoop啊,各种。。
TAOCP,那东西,能看完吗?算法导论的某些习题(例题推导都是不难的,因为写的特别详细)都是当年的论文了。跟着做下来,基本就是在有提示的情况下把当年的论文给推演一遍。。。所以如果只看讲解不做题的话,不算看完算法导论的。。。。。至于装B,洲际大赛的算法题我不是没做出来过,只是我没参加过比赛而已。。。我当初就是因为我第一眼看算法导论目录发现有70%的算法我都写过代码,其他的我也了解一些,所以我才买回来的看的,里面80%的题目我是不用草稿纸的,但是有5%的题目能够让我思考一天以上。。。至于taocp,那个应该是看不完的。里面有一些题目40+的那种,一道题就可以作为你一学期的课题了。45分以上的那种题,好多都是经历了好多年才被业界干掉的(他举了个例子,费马大定理45分),50分的是至今还没人给过解答的问题。。如果那东西一人刷完就不是神的问题了,而是是不是世界第一的问题了。。。能够刷完第一本的所有题目还觉得简单的话就可以去给比尔盖茨发简历了。。。那套书现在一共三大本。。。
@ aaaaaeaaere 最简单的办法,把下面的链接复制一下,然后用浏览器打开(你可以选择换成:“上海天气” 之类的,也可选择把“北京天气”换成 “我想看体育新闻”之类的):http://www.tuling123
楼主,我看过你写的另外两本书的书评(java编程思想,30天自制操作系统),我觉得你的基础应该是相当好了啊,怎么可能会找不到一份好工作呢?