这是本好书,但是。。。
国外的教材,能重复再版的一般都是久经考验的好书,这本书英文已经出到第6版了,功力自是炉火纯青,经典之作毋庸置疑。
首先值得一说的是虽然本书包含了大量内容,但章节编排都相当合理:象从逻辑开始,逐步过度到定理的证明;从集合过度到函数,从函数过度到递归;从组合数学到概率,等等。整本书阅读起来很畅顺,当词典查阅也很方便。
书中还穿插了众多数学家的生平八卦,让读者在有趣(或者,枯燥?)的阅读当中增添了几分轻松感觉。
第二,这本书提供了大量乃至多得有点恐怖的练习——平均每小节后面都有60道左右的练习,虽然大部分难度不大,但却需要相当多的时间来完成。作者在前言中相当强调练习的重要性,建议学生『做完本书练习之后再做更多的练习』,但仅仅完成本书的练习已经不是一件简单的事情。
按我个人的阅读速度来说,看一小节只要半小时到一小时,但完成练习需要的时间却是阅读的数倍!特别是遇上证明题的时候,常常是奋笔疾书,天气热一点的话,做完练习不知不觉已经满身大汗了,好比操场上跑了几百米,想想要完成全书数千道题,实在让人不寒而栗。
另外,前面提到,本书虽然包含了大量的内容,但是,离散数学所涵盖的知识之广,光是一本800页的书是远远不够的!书中多数章节都仅仅是相关知识的基础知识,对这本书中的每一个知识点,比如:逻辑、函数、组合数学、概率、算法等等,都可以延伸出无数本书,有兴趣的话,不妨沿着书后的推荐阅读列表,继续深入下去。
最后,说一个经常听到的,关于离散数学和算法的误区:很多人认为离散数学是算法的一个『附属物』,认为只要学了算法,离散数学就无所谓。这其实是种买椟还珠的行为——离散数学是多数算法及数据结构的基础。离散数学是核心,大多算法是构筑在离散数据之上的一个解法,也就是一个技巧而已。
一言蔽之,谁都可以对着算法书『抄』出一段算法来,但如果你不理解该算法背后的数学意义,你就不算理解这段算法的行为特性,而这种一知半解很可能会给你带来麻烦。
这也是为什么所有严肃的算法书,第一部分总是先教数学——《taocp》,作者还专门出了一本书,讲述计算机科学所必须的数学知识,名叫《具体数学》;又或者以数学章节作起点——《algorithms》;最低限度,它会包括一个数学附录——《introduction to algorithms》,旧版是将数学知识放前面,后来改作附录了。
所以说,埋头钻研各类算法的奇技淫巧之前,不妨先把离散数学先学好,后面学习算法知识,自然是事半功倍,牙好胃也好,吃嘛嘛香!
-----------------------
2011.1.31 更新
MIT课程Mathematics for Computer Science 6.042J/18.062J(2010,Spring)提供的阅读资料,内容基本是这本书的精炼版本,也是一个很好的参考,可以在以下链接找到。
http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-spring-2010/readings/
首先值得一说的是虽然本书包含了大量内容,但章节编排都相当合理:象从逻辑开始,逐步过度到定理的证明;从集合过度到函数,从函数过度到递归;从组合数学到概率,等等。整本书阅读起来很畅顺,当词典查阅也很方便。
书中还穿插了众多数学家的生平八卦,让读者在有趣(或者,枯燥?)的阅读当中增添了几分轻松感觉。
第二,这本书提供了大量乃至多得有点恐怖的练习——平均每小节后面都有60道左右的练习,虽然大部分难度不大,但却需要相当多的时间来完成。作者在前言中相当强调练习的重要性,建议学生『做完本书练习之后再做更多的练习』,但仅仅完成本书的练习已经不是一件简单的事情。
按我个人的阅读速度来说,看一小节只要半小时到一小时,但完成练习需要的时间却是阅读的数倍!特别是遇上证明题的时候,常常是奋笔疾书,天气热一点的话,做完练习不知不觉已经满身大汗了,好比操场上跑了几百米,想想要完成全书数千道题,实在让人不寒而栗。
另外,前面提到,本书虽然包含了大量的内容,但是,离散数学所涵盖的知识之广,光是一本800页的书是远远不够的!书中多数章节都仅仅是相关知识的基础知识,对这本书中的每一个知识点,比如:逻辑、函数、组合数学、概率、算法等等,都可以延伸出无数本书,有兴趣的话,不妨沿着书后的推荐阅读列表,继续深入下去。
最后,说一个经常听到的,关于离散数学和算法的误区:很多人认为离散数学是算法的一个『附属物』,认为只要学了算法,离散数学就无所谓。这其实是种买椟还珠的行为——离散数学是多数算法及数据结构的基础。离散数学是核心,大多算法是构筑在离散数据之上的一个解法,也就是一个技巧而已。
一言蔽之,谁都可以对着算法书『抄』出一段算法来,但如果你不理解该算法背后的数学意义,你就不算理解这段算法的行为特性,而这种一知半解很可能会给你带来麻烦。
这也是为什么所有严肃的算法书,第一部分总是先教数学——《taocp》,作者还专门出了一本书,讲述计算机科学所必须的数学知识,名叫《具体数学》;又或者以数学章节作起点——《algorithms》;最低限度,它会包括一个数学附录——《introduction to algorithms》,旧版是将数学知识放前面,后来改作附录了。
所以说,埋头钻研各类算法的奇技淫巧之前,不妨先把离散数学先学好,后面学习算法知识,自然是事半功倍,牙好胃也好,吃嘛嘛香!
-----------------------
2011.1.31 更新
MIT课程Mathematics for Computer Science 6.042J/18.062J(2010,Spring)提供的阅读资料,内容基本是这本书的精炼版本,也是一个很好的参考,可以在以下链接找到。
http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-spring-2010/readings/
有关键情节透露