应该怎样读TAOCP
2008年12月20日 星期六 下午 09:36

计算机程序设计艺术 第1卷 基本算法(第3版)(英文影印版)的评论   

  谈谈我自己读这套书的心得。抛砖引玉。
    
  首先要清楚这套书的定位:它是古典的算法分析的工具书。
    
  1.古典(classic)体现在模型和问题上。
    
  模型就是顺序算法(sequential algorithms)的经典模型。大名鼎鼎的MIX并非是个程序设计语言这么简单,而是一个计算模型:即标准指令集RAM。这是个非常经典,也是非常符合现实的上界(upper bounds)模型。
    
  该书涉及到的问题是计算机科学诞生之初就自然面对的几个基本的算法和数据结构的问题。时至今日,这些问题还在应用中扮演着重要角色;在很多研究课题中,它们是基础或原型。
    
  2.算法分析(analysis of algorithms)是此书的核心。
    
  TAOCP并没有综述算法设计(design of algorithms)的各种思想;也没有介绍证明问题下界(lower bounds)的各种技巧;也并没有对问题、模型、复杂度这些专题作出体系性的阐述。可以说,TAOCP的几乎所有的篇幅都放在了对具体算法的性能分析上,并把这条路走到了极致。
    
  3.工具书。这最有争议,因为毕竟还有习题。一些介绍也饶有趣味,不太符合大家对工具书的枯燥这一成见。
    
  但把TAOCP看作工具书还是教材,这就关系到怎么去读这本书。
    
  (一)该顺着读还是跳着读:个人认为,没有哪本专业书是不能跳着读的。但前提是你对整个书的结构比较清楚,对它的内容也一定程度的熟悉。知道自己想要查阅的部分。如果是初学者,则不建议这么作,至少还是老老实实的把第一章顺序读下来。可是TAOCP并不是给初学者看得。
    
  (二)初学者适合读TAOCP吗:不太建议。但也要看如何定义初学者——吾生而有涯,而知也无涯。一定程度上,每个人都是初学者。读 TAOCP的前提,就是自己至少比较清楚轻重缓急,可以大概判断那些是根本,那些过时,那些是炫技。这根据每个人的需要,都有各自的具体情况,但至少心里要有点数。如果读书时觉得前路茫茫,完全不知哪里重要。那么去正经的选一门算法基础课才是更应该作的。
    
  (三)MIX值得用心学吗:这要首先清楚Knuth为什么要在这个讲算法的书里搞出个MIX。个人理解,原因有三。其一,如上所述,计算模型;其二,作者个人的审美品味;其三,用于描述算法的语言。第一条里MIX是桥梁作用,确保数学上的严谨,同时也足以代表现实中典型的计算机体系结构。第二条是美学意义。第三条的作用等于伪码。算法用MIX写一遍,这是为了确保上界算法在模型内的严谨性。整个书都没有用MIX模型来证明任何下界,因此除了确保严谨性,MIX没有在数学上起到实际的用途。因此,过分钻研MIX对于理解书中算法没有太多帮助。但如果纯粹只是个人兴趣则另说。
    
  (四)习题该怎么对待:TAOCP是为数不多的计算机专著里面能出这么多高水平习题的了。如果有大块的时间,能做一做当然最好不过。但如果只是一般的查阅,习题并非必要。不过有的习题本身就是经典问题。如果正文里没有找到想要的东西,不仿看看习题。
    
  (五)如何读正文里的算法分析:TAOCP里面的算法分析,算是古典算法分析里面的原教旨主义。始作俑者就是Knuth本人,后面还有 Sedgewick和Flajolet等一干人等给他发扬光大。这一派的作风可以说分毫必究,连常数都不放过。但数学工具却无外乎初等的《具体数学》的工具。这是很好很强大的东西,掌握好了,无论研究还是工作都很方便。但其实TAOCP的数学都不算太难,仔细倒是真的。因此,如果时间不是特别充裕,对书中结构的了解,要比具体分析步骤重要。这些经典内容多少年就没变过,每次有用时都可以回来查查看,每查一次说不定会有新的收获。
    
  (六)TAOCP的不足:前面已经提过了,下界(lower bounds)介绍的不够。下界结果,大多数只在章节结束的讨论部分引用一下。第三卷的查找(searching)一章,一些近些年的下界方面的新进展都没有被引用,Knuth可能没有想到,数据结构这个经典方向这么多年来都在不温不火的不断前进着,尤其是下界。类似的也有第二卷的随机数(random numbers)一章,可以说连上界都严重过时,错过了去随机(derandomization)的黄金时代。好在其他几章这么多年来无甚进展,没怎么过时。
    
    
  许多人对TAOCP的推崇是无条件的,这里难免有人云亦云的成分。其实大可不必,读的人尽管放轻松。这么说不是因为TAOCP不值得推崇,而是就算把一切溢美之词都抛于脑后,随着岁月流逝,反复的阅读,你也一定会越来越喜欢这部书的。它的魅力经的起时间的考验。

http://www.douban.com/review/1319514/?from=mb-24818774

类别:拿来主义 | | 添加到搜藏 | 分享到i贴吧 | 浏览(453) | 评论 (0)

上一篇:反射与序列化    下一篇:The Art of Computer Programmin...

应该怎样读TAOCP相关推荐

  1. 敏感性分析算法 程序_计算机程序设计艺术(TAOCP)精读笔记1 - 算法分析真正应该有的样子 Part 1...

    系列文章的导航链接: 张浩驰:<趣味算法>专栏所有文章分类 - 导航​zhuanlan.zhihu.com 下篇文章Part 2导航: 张浩驰:计算机程序设计艺术(TAOCP)精读笔记1 ...

  2. 你为什么“啃不动”你手中的技术书?

    图源:Pexels 很多读者都怕读TAOCP,笑称买完只能用来垫显示器,或装饰门面.但其实,可能你选读这本书的真正动机是给Bill Gates 发邮件找工作. 著名编辑人艾德勒曾说过:"任何 ...

  3. 高德纳(Donald Ervin Knuth):这位所有程序员心中的大神今天80岁了

    80th 高德纳(Donald Ervin Knuth) 高德纳1938年1月10日出生于美国威斯康辛州,1956年以超高分数高中毕业进入凯斯理工学院.当时高德纳比较纠结是学物理还是音乐,因为高德纳的 ...

  4. 计算机领域经典巨著TAOCP卷3上市!【含赠书】

    1968年,C语言还未出现,鼠标刚刚问世,ARPAnet还在酝酿之中. 2017年,编程语言多达几百种,PC走进千家万户,ARPAnet已经退役十多年. 1968年,有一套关于编程的图书出版了第1卷. ...

  5. 转-最常被程序员们谎称读过的计算机书籍

    英文原文:Books Programmers Claim to Have Read 马克·吐温曾经说过,所谓经典小说,就是指很多人希望读过,但很少人真正花时间去读的小说.这种说法同样适用于" ...

  6. 分享一些书籍,方方面面,很多值得一读

    Github: github.com/aototo/blog 博客长期更新,喜欢的朋友star一下 编程书很多,各式各样的, 有的书讲实战,有的书讲内功, 主要分享一些自己收集且提升编程内功的书籍. ...

  7. 最常被程序员们谎称读过的计算机书籍

    英文原文:Books Programmers Claim to Have Read 马克·吐温曾经说过,所谓经典小说,就是指很多人希望读过,但很少人真正花时间去读的小说.这种说法同样适用于" ...

  8. 多读书,不如读好书:程序员必读的30本书

    优秀的程序员需要有大量的知识技能储备,读书是获取知识的一个非常重要的途径. 每每读到好书,会让人茅塞顿开.醍醐灌顶. 以下图书,都可以称得上好书.你会推荐哪些给更广大的程序员呢? 国外图书 <C ...

  9. [转]计算机程序设计的史诗TAOCP

    倘若你去问一个木匠学徒:你需要什么样的工具进行工作,他可能会回答你:"我只要一把锤子和一个锯".但是如果你去问一个老木工或者是大师级的建筑师,他会告诉你"我需要一些精确的 ...

  10. 读刘未鹏老大《你应当怎样学习C++(以及编程)》

    标签(空格分隔): 三省吾身 原文地址:你应当怎样学习C++(以及编程) 本人反思自己这些年在学校学得稀里糊涂半灌水. 看到这篇文章,感觉收获不少.仿佛有指明自己道路的感觉,当然真正困难的还是坚持学习 ...

最新文章

  1. Flutter从0基础到App上线
  2. PHP中正则表达式学习及应用(二)
  3. Tree命令安装和使用
  4. 设计模式学习之Factory Method模式和Abstract Factory模式
  5. [原创]2014年上半年测试书籍推荐
  6. java.lang.UnsupportedOperationException 异常分析
  7. kali mysql停止服务器_从零开始:手把手教你黑客入门攻破服务器并获取ROOT权限...
  8. pca百分比取多少比较好_母亲节给妈妈发多少红包比较好合适 母亲节红包吉利数字含义...
  9. 串的模式匹配(BF算法)
  10. CVE-2021-30116: Kaseya VSA 远程代码执行漏洞
  11. hnu2021小学期程序设计 棋盘
  12. 8051RTX编程一例
  13. Unity利用Input类实现摄像机镜头拉近与拉远
  14. BoomBeach海水效果实现
  15. citespace:Your version‘s status cannot be verified due to network issue. Check your network conne
  16. 华胜天成收购中天安泰10%股权 出手网络信息安全
  17. 商标注册流程,山东商标注册去哪好
  18. 简单网页版的年会抽奖程序,设计个界面套上就可以了,抽奖员工编号姓名改改代码就可以了,很简单的
  19. Dev C++可以编译但运行时提示failed to execute且error 0:操作成功完成
  20. SubString 函数总结

热门文章

  1. mac pdf去水印_mac如何去除视频水印
  2. preg_match_all() 函数
  3. 【教你Win7下如何激活快速启动栏】
  4. 永中Office—公文的数据集成(转)
  5. matlab串口实时画图,基于MATLABGUI界面的MCU串口实时绘图设计
  6. DiffImg_diffimg下载-diffimg官方版下载[图像对比软件]-天极下载
  7. [zz] 高端HIFI发烧音频DAC解码芯片排名
  8. 理解t检验的一个简单技巧和手动计算P值
  9. 【2022年Spring全家桶】Spring5.x 框架详解
  10. typedef使用方法