“算法与计算数学”之四书五经

“算法与计算数学”之四书五经
选择自 myali88 的 Blog  

  倘若你去问一个木匠学徒:你需要什么样的工具进行工作,他可能会回答你:“我只要
一把锤子和一个锯”。但是如果你去问一个老木工或者是大师级的建筑师,他会告诉你“
我需要一些精确的工具”。由于计算机所解决的问题都是从生活中抽象出来的问题,其复
杂性不言而喻,所以我们需要这样精确有效的工具去解决现实生活中的复杂问题。算法、
数据结构都是程序设计中必不可少的精确工具。算法的重要性是每一个程序员都十分清楚
的。 

    程序设计当中解决得相当一部分问题都会涉及各种各样的科学计算,这需要程序员具
有什么样的基础呢?实际问题转换为程序,要经过一个对问题抽象的过程,建立起完善的
数学模型,只有这样,我们才能建立一个设计良好的程序。从中我们不难看出计算数学在
程序设计领域的重要性。恩师孟岩先生曾经撰文过若干技术书籍之四书五经,似乎这也成
了先生的标志之一,这次冒险也凑一个……

    作为这方面的介绍,如果不介绍下面这本唯恐大师们笑话,即是计算机程序设计的史
诗TAOCP:
《计算机程序设计艺术》

英文名称:The Art of Computer Programming
作者:Donald.E.Knuth

    Donald.E.Knuth人生最辉煌的时刻在斯坦福大学计算机系渡过,美国计算机协会图灵
奖的获得者,是本领域内当之无愧的泰斗。被简称为TAOCP的这本巨著内容博大精深,几乎
涵盖了计算机程序设计算法与理论最重要的内容。现在发行的只有三卷,分别为基础运算
法则,半数值算法,以及分拣和搜索。总共应当有7卷。以我个人对本系列书的把握,大家
除了可以如其它书籍那样阅读本书,也可以将其作为计算机程序设计的字典。毕竟内容涵
盖实在是太广泛。看本书时最关注的应当是作者严谨的思维方法。每个人都有自己的读书
方法,一些大师们说应当顺序读本书,因为它被写得简直就像是诗,然而这还要看大家个
人的体会。至于本书的价值我觉得Bill Gates先生的话足以说明问题:“如果你认为你是
一名真正优秀的程序员读Knuth的《计算机程序设计艺术》,如果你能读懂整套书的话,请
给我发一份你的简历”。作者数学方面的功底造就了本书严谨的风格,虽然本书不是用当
今流行的程序设计语言描述的,但这丝毫不损伤它“程序设计史诗”的地位。道理很简单
,它内涵的设计思想是永远不会过时的。除非英语实在有困难,否则建议读者选用英文版


    如果将TAOCP比喻成“计算机程序设计理论的荷马史诗”,那么被简称作CLRS的《算法
导论》不妨称它作 “计算机算法的圣经”。

《算法导论》

英文名称:Introduction to Algorithms

作者:Thomas H. Cormen ,Charles E. Leiserson ,Ronald L. Rivest ,Clifford St
ein 

    本书的主要作者来自麻省理工大学计算机,作者之一Ronald L.Rivest 由于其在公开
秘钥密码算法RSA上的贡献获得了图灵奖,目前是算法的标准教材,美国许多名校的计算机
系都使用它,国内有些院校也将本书作为算法课程的教材。另外许多专业人员也经常引用
它。由于TAOCP只出版了3卷,CLRS比较起前者来则显得内容更为全面,基本包含了所有的
经典算法。本书程序全部由伪代码实现,这更增添了本书的通用性,使得利用各种程序设
计语言的程序员都可以作为参考。语言方面通俗,很适合作为算法教材和自学算法之用。
国内的很多作品名为数据结构,从本书中断章取义,把数据结构与算法混为一谈,搞得作
者自己都迷迷糊糊。这也是我不十分愿意向大家推荐国内作品的原因。你会发现现在基本
上所有的数据结构与算法书籍都会将本书作为参考文献之一,更可以说明一个问题,本书
是作为读者进行算法学习的最佳选择。作为本书的补充内容,我愿意向大家推荐下面的学
习资料:你可以通过这个地址找到本书的所有练习答案:http://www.itu.dk/people/bee
tle/ 。为了更好的学习本书中的内容,最好的指导当然是来自作者本身讲述本书的课程,
读者们可以通过http://18.89.1.101/sma/5503fall2001/index5503fall2001.html获得课程的录像。

    有两套优秀的书我不想作为单独的推荐,但作为初学算法的高级语言程序员也不失为
极好的参考:
  Algorithms in C++以及  Algorithms in Java系列。作者都是普林斯顿大学计算机系赫
赫有名的教授Robert Sedgewick, 他是TAOCP作者Donald.E.Knuth大师们下的高徒。算法理
论方面并不逊色于CLRS,两个版本分别为C++和Java程序员量身定做。作为专门语言的算法
书籍参考,这两本也是我唯一愿意向大家推荐的。可以作为《算法导论》一书的补充。如
果你对密码学算法感兴趣,那么《应用密码学》便是你的首选。

    计算机数学理论方面可推荐的书籍是相当多的,究竟哪些数学理论基础是我们应当涉
足的,哪些基本上我们是不需要的,大家可以参考《CSDN开发高手》9月刊上的《计算机科
学技术数学理论浅谈》,或者通过下面的地址浏览此文:http://www.cstc.net.cn/docs/
docs.php?id=111
离散数学在计算机数学理论领域的位置显然是首屈一指的,首先向大家推荐的就是:

《离散数学及其应用》

英文名称:Discrete Mathematics and Its Applications,Fourth Edition 

作者:Kenneth H.Rosen

    本书的价值已经被全世界几百所大学所证实,作为离散数学领域的经典教材,全世界
几乎所有知名的院校都曾经使用本书作为教材。以我个人观点看来,这本书可以称之为离
散数学百科。书中不但介绍了离散数学的理论和方法,还有丰富的历史资料和相关学习网
站资源。更为令人激动的便是这本书少有的将离散数学理论与应用结合得如此的好。你可
以看到离散数学理论在逻辑电路,程序设计,商业和互联网等诸多领域的应用实例。考虑
到大多数读者的基础,这里推荐给大家的是本书的中文版(原书第四版),本书的英文版
(第五版)当中更增添了相当多的数学和计算机科学家的传记,是计算机科学历史不可多
得的参考资料。作为教材这本书配有相当数量的练习。每一章后面还有一组课题,把学生
已经学到的计算和离散数学的内容结合在一起进行训练。这本书也是我个人在学习离散数
学时读的唯一的英文教材,实为一本值得推荐的好书。

    传统数学研究的对象过于抽象,导致对具体的问题关心不够。为了直接面向应用的需
要,伟大的计算机科学家以及数学家Donald.E.Knuth在麻省理工大学提出了“具体数学”
。自从那天起,“具体数学”便成了计算机科学的基础。所以下面为大家推荐的就是一本
经久不衰的著作:

《具体数学—计算机科学基础》

英文名称:Concrete Mathematics A Foundation for Computer Science(Second Editio
n) 

    很令人兴奋的就是这本书的主要作者正是泰斗Donald.E.Knuth以及他的同事Ronald L
.Graham。书稿是他们在1970年的时候在计算机系教授研究生本门课程的基础上整理出来的
教材。内容上是Knuth的巨著TAOCP第一部的扩展,有些比TAOCP中谈及地又深入了许多。重
点放在高级计算机程序设计话题以及算法分析上,涉及了计算机科学领域内几乎所有可能
遇到的数学知识。具体数学是离散数学和连续数学的综合,书中这点做得极为出色,介绍
的内容涉及到书中许多经典问题的解答比目前广泛流传的解法更易懂。对于提高大家的计
算数学修养有很大帮助。之所以TAOCP有的时候读者们读不懂就是因为计算数学基础不是十
分扎实,但以我个人经验,若能对本书中内容有一个比较好的理解,会给你阅读如TAOCP这
样的旷世巨著带来很大的方便。

    概言之,算法语数学乃程序设计之本,计算科学之精华,尚需吾等予以足够的重视。
有关算法与数学在计算机程序设计中的作用和地位,不妨参考我的一片拙作《计算科学数
学理论浅谈》,其中有较详细的论述。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值