用了半年时间终于把具体数学看完了.
这次下了狠心终于用于6个多月的早晨1个多小时间的时间和周末的时间把这本难啃的“家伙”终于啃完了.
这本书在网上也看了很多其它人的评论,结合自己的想法写写自己关于对于这本书的看法。
- 这本书适合哪些人,不适合哪些看. 我这本书比较适合有经验的程序员去读,我觉得至少有5年以上程序设计经验,对算法设计有更高追求的,并且有较好的数学基础上,至少需要学过微积分和概率统计,最好了解一些数论的知识。为什么这么说呢?因为这本书的作者在书中分析的时候会假设你懂这些基础,如果不了解这些基础,你会在看此书的时候发现很多精彩的公式是如何推导。所以这本书并不适合每一个人。另外对刚入门的程序员也不太适合,因为你可能找不到很充分的理由去读而仅是看了别人说这本书好就去读,读一段时间会打击你的。
- 其实这本书并没有网上很多人说的那么神奇。说白了,这本书就是一本告诉你如何做算法分析的书,而且做到极致。你如何想读TAOCP最好先读一读这本书作为基础。
- 其实这本书的英文标题说的很准确 A Foundation Of Computer Science,而中文名容易误导读者。这本书只是当且仅是计算机科学的一个基础,注意这里的一个,不要以为读了此书就会如何如何。它告诉你的仅是在设计算法的时间算法复杂度的分析,还有一些分析复杂问题的思路。
- 如何读些书? 我觉得除非你的数学知识特别好,很难在第一遍就把书读懂,建议像我这样一开始不要把所有习题都做了,先把Warmup部分做了,一个习题不做的话,你会发现到后面部分你根本看不懂。另外在读的时候建议不要跳着读,因为此书后面都是以前面为基础的.第一章Recurrent是后面几乎所有章节都会用的思想,Sums和Integer Functions为后面的Binomial Coefficients打下基础,Number Theory相对独立一些,这部分可以读一些其它数论的书补充一下;Special Numbers一开始我以为这里可能是一些很少用的数列,后来在后面部分章节的公式大量用到了;Generation Function的在解决Binomial coefficients有出奇的用处;Discrete Probability这章感觉一般,并没有超出一般概率与统计方面的书;最后一章是最难的一部分,对于一个函数算出较好的近似,当然必须前面打好了基础才能看这一章了。
- 我读完以后学到哪些:虽然后面几章的习题没怎么做,但是我每一节都用心去读。我学习到以下内容:
- 对于复杂问题的分析过程。先可以从具体的小规模找规律,再进行抽象,找closed-form,再进行更高层次的抽象。
- 极大的扩展我的数学的视野。学习到了在一般教材里找不到而极有用的知识,像:Hypergeometric Functions,Stirling Number等等,这样的太多太多,大部分都是几百年前人们总结的知识。
- 书中大部分的知识如果想非常了解的话,你需要读很多其它书和论文。
- 我认为算法分析决非像在数据结构课程中学习的几个大O那么简单,而是一门艺术,用书中margin部分的话,是一门在精确与粗放的之间平衡的艺术。