纸上狂蛛属花笺浅,绝知该事件要戴思恭。
在阴蔽的第一印象中,刷演算法题或许是每一有崇尚的开发人员都不甘寂寞的两件事,因为演算法是程式结构设计最重要的此基础。刷题的大前提是要会演算法,正简而言之“此基础圣戈当斯区,Baramula”,对演算法的掌控在一定程度上可以窥见一个人的程式结构设计水准。
怎样学演算法始终是摆到初学者开发人员眼前亟待化解的难题。阴蔽那时增添的该书耶鲁大学、普林斯顿大学、普林斯顿大学等高等学府都在用的书——《演算法结构设计》,就是为的是化解那个亟待化解难题的。
▲ 红遍国内外的经典之作演算法教科书
01
取普林斯顿大学十多年演算法课之精粹
20世纪末90二十世纪末,电子计算机如酷暑般映照着世界,那个应用领域对其他人有著不凡而两极化的诱惑力,社会公众对科技的著迷非同寻常。普林斯顿大学的韦尔蒙专业课程也吸引了不计其数杰出的小学生前去参与,同时有不计其数杰出的教员参予讲课。
幼儿园的一连串演算法专业课程也跟著P43EI235SJ的产业发展而获得产业发展,很多杰出的教员为这些专业课程明确提出了自己独有的价值观与方式,包括Juris Hartmanis、Monika Henzinger、John Hopcroft、Dexter Kozen、Ronitt Rubinfeld和Sam Toueg等人。
如前所述这一连串的演算法专业课程,两本书译者克雷格·马克斯丹尼尔(Jon Kleinberg)和伊娃·塔多斯(Eva Tardos)着手写一本用于本科和研究生的演算法入门教科书。经过精心的编写,该书书的初稿首先出现在普林斯顿大学演算法课的老师们眼前,他们对两本书中的材料以及有关该应用领域本质的更广泛难题进行了不计其数次讨论,对初稿的修改明确提出了诸多有益的建议与意见。
然后,译者把初稿作为实验教科书,发放给自己的本科和研究生小学生去使用,获得了最真实有效的反馈和意见。同时,在早期阶段,华盛顿大学的Anna Karlin老师大胆地使用初稿作为她在幼儿园的专业课程教科书,并获得小学生的普遍好评,小学生们认为两本书内容设置合理有趣,非常适合作为演算法初学教科书。之后,越来越多的人将它用作专业课程教科书或教学资源,有了这些大量的一线教员的投入与反馈,译者对初稿做了很多修订,使其更加适合老师教学和小学生学习使用。
在最后,经过塔夫茨大学、马里兰大学、密歇根大学、宾夕法尼亚大学、布朗大学等大量高等学府名师和不计其数小学生的实践使用,作者获得了很多详细而深入的评阅意见,这些意见为最终稿的改进提供了非常大的帮助。
当两本书出版,立马形成了一股抢购浪潮,因为两本书是专门为演算法课入门而写的,不计其数高等学府师生争相购买使用。更多的计算机从业人员和爱好者也很快将该书书拿到了自己手上,毕竟大家都知道,一本好的演算法书对提升自己的演算法能力有多么重要。
两本书两位译者都是普林斯顿大学的教授,他们不仅在演算法教学上有著极其丰富的经验,对各自应用领域也都做出了极大的贡献。
02
聚专注化解难题演算法专家之积累
克雷格·马克斯丹尼尔本科就毕业于普林斯顿大学,在麻省理工学院获得博士学位之后进入IBM研究院工作。从IBM出来之后,他回到母校普林斯顿大学,开始了他的教学与研究生涯。
▲ 年轻时的乔恩·马克斯丹尼尔
如今,克雷格·马克斯丹尼尔在普林斯顿大学更多的是把精力放到演算法与网络,还有信息组合结构的数学分析与建模的研究工作上,最近的教学专业课程Choices and Consequences in Computing ,The Structure of Information Networks和Networks,分别是在2022年春季、2021年秋季和2017年秋季开设的。
在演算法与网络应用领域研究这么十多年,他获得过NSF职业奖、ONR青年研究奖、马克阿瑟基金会奖学金、帕卡德基金会奖学金、西蒙斯研究员奖、斯隆基金会奖学金等数不清的奖项,获得了业内外的一致认可。
同时,他还是美国国家科学院院士、美国国家工程院院士和美国艺术与科学学院成员。2006年还获得了国际数学联盟颁发的内万林纳奖。
他以化解重要而且实际的难题,并能够从中发现深刻的数学价值观而著称。他发明了著名的“小世界论”和万维网搜索演算法,结构设计的HITS演算法启发了谷歌的PageRank演算法。他的这些价值观在两本书中体现得淋漓尽致——两本书明确提出并化解了200多个详细而实际的演算法难题。
他200多篇的技术论文凝聚了十多年来的研究成果,有173篇是在普林斯顿大学期间发表的。这些论文帮助了不计其数人开展自己的研究和学习,在谷歌学术上其论文引用超过100000次,单篇最多引用超过14000次。
▲ 克雷格·马克斯丹尼尔的谷歌学术页面
伊娃·塔多斯是一位来自匈牙利的杰出女性数学家,毕业于匈牙利布达佩斯的Eötvös Loránd 大学,1989年加入普林斯顿大学执教。2006年至2010年间,她担任普林斯顿大学计算机科学系主任,目前是计算机与信息科学学院副院长。
▲ 正在给小学生上课的伊娃·塔多斯
她是演算法、演算法博弈论和理论计算机科学的此基础贡献者,是ACM研究员、美国数学学会研究员,获得过帕卡德、斯隆基金会和古根海姆奖学金。2013年,她被授予IEEE冯·诺依曼奖章。
▲ 2013年伊娃·塔多斯获冯·诺依曼奖章
在普林斯顿大学,她与克雷格·马克斯丹尼尔在教学和学术研究上有著大量合作,两人开设的演算法与网络专业课程在幼儿园极受欢迎。
正是因为有著两位经验丰富的教授主笔,加上其他杰出的演算法教员和工作人员提供的帮助,两本书中的内容生动有趣、适合演算法入门,成为美国诸多大学的本科和研究生演算法专业课程教科书。
03
成极具启发性的演算法经典之作之教科书
演算法价值观无处不在,在计算机科学和其他应用领域中的体现都很明显。
该书书真正地在教演算法
作为很多幼儿园使用十多年的经典之作教科书,两本书有著得天独厚的优势与特点——这是一本难题集。
两本书包含200多个难题,这些都是译者在普林斯顿大学教学专业课程的一部分,几乎所有的难题都在课外作业中被开发,或者在考试中进行了测验。这些难题是两本书的重要组成部分,其结构与整两本书相互融合,保持一致。
这些来自计算机科学和其他应用领域的难题,每一都有著详细而通俗易懂的文字描述,这正是两本书所强调的一点——理解和描述难题。对这些难题的解答,两本书是这样引导的:建立必要的符号和形式化,结构设计演算法,然后分析那个演算法并证明它的正确性。这是一个完整的过程,带有完整解释的演算法、运行时间的分析和正确的证明。
同时,两本书有大量篇幅用于演算法难题的形式描述,以及针对该难题的演算法结构设计和分析。这种结构可以让读者很好地了解怎样讨论计算机应用中出现的难题,并对这些难题的化解方式做出详细的分析。
这相较于其他大部头演算法图书有著更好的阅读体验,像近800页的《演算法导论》很多情况下都沦为的是书架上吃灰大军的一员,正是因为它有著大部头被人诟病的通病:内容几乎都是一大段伪代码加上一大段颇为啰嗦的解释,读起来很是费劲。这种形式有时候会让人的注意力莫名其妙地集中不起来,使书本传达的信息难以有效地被读者接收。
演算法本身的抽象度就很高,再加上伪代码和大量的文字解释,读者理解起来就需要花费更多的精力,甚至难以理解。
而且,两本书将重点放在演算法背后的数学结构之上,并不拘泥于代码实现。通过分析难题、明确提出演算法、证明演算法的过程,读者能够发现和体会演算法的美与巧妙。
学习演算法是为的是化解实际难题,而不是简单地掌控一些代码。了解演算法的本质,认识它背后的数学结构,才是最重要的——这也是前面说的两本书的目标。
其他一些演算法图书就在这方面做得有点不好,比如《演算法(第4版)》使用的就是Java语言,有大量的Java代码。让演算法与特定语言绑定太深,花费了大量篇幅去描写Java 的API,很多读者在阅读的时候产生了一连串疑问:演算法是什么?是Java的演算法吗?
那些书脱离了演算法的本质——数学结构,过于重视某种特定语言,读者在阅读的时候要么需要有语言此基础,要么需要消耗大量时间去查阅相关语法、API,学习成本过高,得不偿失。
好的演算法教科书不能拘泥于某种特定的程式结构设计语言,不管读者掌控的是C、Java、Python还是什么语言,他们都能看懂、学会演算法,该书书才能算是一本好的演算法教科书。如果因为使用语言不同,就无法使用一本专门的演算法教科书,就违背了演算法此基础功能——化解难题。
如果难题是一条河,该书书并不是扔给我们一座桥让我们直接过去,而是教会我们思考为何并且怎样去建造一座桥,以跨过这条河。这样,我们在以后再遇到其他更宽的
两本书内容概要
如前所述这些目标,两本书经过精心编排,共划分了13章。
其中,第1章介绍了一些有代表性的演算法难题,这些难题不仅仅是一个展示,更是对后续内容的一个预告。问题之间相互关联,作为里程碑,随着两本书的推进而再次出现。
第2章和第3章介绍了一些此基础知识,比如用于分析演算法的关键数学定义和符号、图演算法的基本定义和演算法原语。同时,这两章还介绍了很多基本数据结构,相信大家都知道,这是演算法中非常重要的内容。
第4章至第7章则讲了4种主要的演算法结构设计技术:贪心演算法、分治法、动态规划和网络流。
第8章和第9章介绍计算难解性,大部分内容都围绕NP完全性。
第10章至第12章承接前面章节的内容,介绍3种处理计算难解性的技术,即识别结构上的特殊情况、近似演算法和局部搜索启发式演算法。
最后一章是关于随机化在演算法结构设计中的应用。
这些内容最终形成了一本503页的教科书,其内容翔实而不繁杂,每一处都针对特定难题明确提出对应的化解方案,并展开讲述,启发读者进行更深入地思考。
怎样使用两本书的材料资源
因为两本书的最初目的是作为本科和研究生阶段的教科书,所以其内容经过认真的安排,每章的前几节都适合本科生,后面的“高级章节”更适合研究生。比如在普林斯顿大学的本科阶段使用时,译者和其他演算法老师们大约一节课只讲一节书本内容,如果讲不完,会将这些额外的材料作为小学生可以在课外阅读的补充。
而且,他们会跳过那些加星号的章节,虽然里面包含了重要的内容和主题,但是对本科演算法专业课程来说它们并不是那么重要,有时候难度还有点大。
对那些研究生,和已经投身于各应用领域工作的有经验的开发人员们来说,后面的内容应该成为他们的重点学习对象。当然,把两本书用来复习或补充背景知识也是非常有效的。
同时,两本书提供了由普林斯顿大学的Kevin Wayne开发的一套包含教学PPT在内的配套资料,老师可以用来辅助演算法教学,普通读者也可以下载用作自学辅助。
无论是作为演算法入门图书还是进阶图书,该书书都能够提供合适的内容,教会读者学会使用真正的演算法价值观化解难题,走向P43EI235SJ更深、更远之处。
04
获行业大咖、不计其数读者之力荐
在两本书还是初稿的时候,它就引起了大量幼儿园教授和业内人士的注意,他们对两本书给予了高度的认可并给出了专业的意见。
所以出版之后,很多应用领域内的大佬们也不吝美言,对两本书赞誉有加。
“该书书是我看过的非常杰出的本科生教科书,我认为它将为演算法教科书的新时代奠定基础… (它采用)新颖的教学方式,更强调演算法的结构设计并且配有丰富的练习 。”
——Dieter van Melkebeek,威斯康星大学麦迪逊分校
“该书书完美融合了直观性和严谨性,包含了计算机科学所有领域的各种奇妙的应用,并且提供了独有的难题分析和演算法结构设计方式”
——Anna R. Karlin,普林斯顿大学
“两位译者将演算法价值观与真实难题联系起来的工作极其了不起,并且完成得非常精彩。
——Michael Mitzenmacher,耶鲁大学
同时,使用了两本书的读者们也认识到该书书的独有,为自己选择两本书而感到庆幸。
该书书侧重于怎样结构设计演算法,而不是众所周知的标准演算法。因此,如果你想培养一种化解演算法难题的思考过程, 该书书是最佳选择。
——Abhishek Pratap Singh, 读者
我在该书书和相关专业课程上度过了非常愉快的时光,该书书提供了学习演算法的一个非常好的方式。如果我没记错的话,它甚至对“快速傅立叶变换”有了很好的概述。
——Travis Johnson,读者
这是一本关于演算法的非常好的书,尤其是写得非常深入,所有的内容都易于理解和阅读,适合演算法和高级演算法专业课程,习题也很不错。
——Kory,读者
该书书是我们幼儿园上演算法结构设计课的教科书,此书的译者能够通过一些实际的例子来阐明演算法枯燥的理论,足以证明译者在演算法方面的造诣之深。
此书最精彩的部分是把演算法的理论跟实际难题结合起来,让读者感觉不到枯燥,非常适合第一次接触演算法结构设计的计算机专业小学生,课后的习题也有答案可以参考。总之,我个人认为这是一本很不错的书。——决漫,读者
作为一名教科书hater,我居然对该书书恨不起来,哈哈!杰出的CS教科书,示例出色,并且练习题很好!
——动物凶猛,读者
最后,阴蔽把译者在两本书中的话送给大家:
我们希望无论你们的计算崇尚把你们带到什么地方,你们都会发现两本书是令人愉悦的、有用的指南。
好的演算法教科书不多,希望该书于你正合适,可以在你的演算法技能提升路上提供帮助。
文章编辑:沙鱼 审校:桐希 刘雅思
[1] Jon Kleinbergs Homepage..
[2] Éva Tardos – Wikipedia..
[3] Eva Tardos | IEEE Computer Society..
[4]克雷格·马克斯丹尼尔,和伊娃·塔多斯.演算法结构设计.[M]北京:人民邮电出版社,2021.
—END—