为什么选择《演算法结构设计》
《演算法结构设计》的两个关键特征是难题集。《演算法结构设计》共包涵 200 数个难题,这是他们在普林斯顿大学课后教学专业课程的一部份,几乎大部份难题都在工作台量中被开发,或者在课后评量进行了笔试。他们将难题视作两本书的两个关键组成部份,并且让它们的结构与他们对文本的整体方法完全一致。其中绝大部份文本包涵了许多难题的详尽文字叙述,那些难题出现在软件工程专业领域领域或其它地方性。部份难题是他们在教科书中探讨的难题的实践:建立必要性的记号和公理化,结构设计演算法,然后预测那个演算法并断定它是恰当的。(他们认为那些难题的完备标准答案如果主要包括大部份那些部份:带完备解释的演算法、运行天数的预测和恰当性的断定。)那些难题的想法很大程度上来自他们多年来与在不同领域工作的现代人的探讨。而且,在某些情况下,那些难题也记录了两个有意思的(虽然是容易的)演算法的专业领域,他们没有在其它任何地方性看到过那些专业领域。
为了帮助解决那些难题,他们在结语中都加入了四节,名叫“带答疑的练”,探讨两个或数个难题,并叙述了如何公理化两个解。因此,专门针对针对每个带答疑的练的探讨,要比简单撰写完备、恰当的软件系统所需的天数很胖多(换句话说,如果将那些软件系统选定为工作台量题,那么所制的天数明显要比获得完全学分所需的天数长)。事实上,与两本书的永古约省一样,那些节中的探讨如果看作是企图让现代人了解两个更大的操作过程,通过那个操作过程可以考虑这种类型的难题,并最终形成准确解的详尽说明。
关于在专业课程中使用那些难题作为工作台,有三点值得一提的是。首先,难题大致按照技术难度增加的次序,但这只是两个粗略地的指导,建议不要过份倚重它:因为绝大部份难题是专门针对研究生班的工作台结构设计的,结语中的绝大部份难题在技术难度上事实上都差不多。其次,除序号最轻的几个难题以外,其它难题都需要投入许多天数,更要将难题叙述与这一节中的演算法技术联系起来,又要实际结构设计必要性的演算法。在他们的本科专业课程中,每星期大约精心设计 3 道这样的难题。
《演算法结构设计》的课后教学民族特色和补足金属材料
除难题和带答疑的练以外,两本书还有许多其它课后教学民族特色和补足金属材料,以方便课后教学。
与此相反,两本书中大量字数专门针对用于演算法难题的形式叙述(主要包括其背景和潜在性意图),以及针对该难题的演算法结构设计和预测。为了反映这种风格,那些部分始终围绕一系列小节进行组织:“难题”叙述难题并确定准确的形式定义;“结构设计演算法”采用适当的结构设计技术开发演算法;“预测演算法”断定演算法的性质并预测它的效率。那些节在正文中用羽毛图标突出显示。在包涵难题扩展或进一步预测演算法时,还有其它专门针对针对那些难题的节。使用这种结构是为了提供一种相对统一的表述风格,从最初探讨计算专业领域中出现的难题,直到对那些难题的解决方法的详尽预测。
两本书提供了许多补足金属材料作为课后教学的支持。配套的教师手册完成了书中大部份练,为每个难题提供完备的软件系统,还可以提供由普林斯顿大学的 Kevin Wayne 开发的一套课后教学用 PPT,它是按照两本书章节的顺序组织的,可以作为以两本书为教科书的课后教学的金属材料。
如何阅读《演算法结构设计》
两本书主要用于研究生的第一门演算法专业课程,但它也可以作为研究生导论性专业课程的基础。在本科阶段使用两本书时,他们四节课大约讲四节。如果四节课讲不完四节的文本(例如,如果该节提供了进一步的专业领域作为附加示例),那么他们会将那些额外的金属材料作为学生可以在课外阅读的补足金属材料。他们跳过加星号的节。虽然那些节包涵关键的主题,但它们对于专业课程的展开并不那么关键,而且有时它们也比较难。在两本书的前半部分,他们也倾向于跳过结语的一两节(例如,他们倾向于跳过 4.3 节、4.7 节、4.8 节、5.5 节、5.6 节、6.5 节、7.6 节和 7.11 节)。
第 11 章至第 13 章,他们大约结语只讲一半。值得强调的最后一点是:不要将后面的章节看作是“高级章节”,从而认为它超出了本科演算法专业课程的范围。他们结构设计那些章节的目标是让结语的前几节如果适合研究生。他们自己的研究生专业课程主要包括大部份那些章的金属材料,因为他们认为大部份那些主题在本科阶段都占有关键地位。最后,他们主要将第 2 章和第 3 章作为对早期专业课程金属材料的回顾。但是,与此相反,这两章的使用在很大程度上取决于每门特定专业课程与其预备知识的关系。
由此产生的课后教学大纲大致如下:第 1 章,第 4 章至第 8 章(不主要包括 4.3 节、4.7 节、4.8 节、4.9 节、5.5 节、5.6 节、6.5 节、6.10 节、7.4 节、7.6 节、7.11 节和 7.13 节),第 9 章(简述),第 10 章的 10.1 节和 10.2 节,第 11 章的 11.1 节、11.2 节、11.6 节和 11.8 节,第 12 章的 12.1节至 12.3 节,以及第 13 章的 13.1 节至 13.5 节。
两本书自然也支持导论性的研究生演算法专业课程。他们认为,对于有志投身于各种不同领域研究的学生,这种专业课程如果介绍演算法结构设计中当前关键的主题。在这里,他们发现强调问题的形式叙述也很有用,因为学生很快就会尝试在许多不同的子领域中定义他们自己的研究难题。对于这种类型的专业课程,他们包涵第 4 章和第 6 章中后面的主题(4.5 节至 4.9 节和 6.5 节至 6.10 节),以及第 7 章的大部份文本(前面几节讲得更快),还快速介绍第 8 章中的 NP 完全性(因为许多新研究生在本科时学过),然后将剩下的天数花在第 10 章至第 13 章。虽然在研究生的导论性专业课程中,他们的重点是更高级的部份,但他们发现,对学生来说,有一本完备的书籍用于复习或补足背景知识是很有用的,因为学习这门课的学生的本科背景有所不同。
最后,两本书支持研究生、研究人员或计算机专业人员自学,他们也许希望了解如何能够在自己的工作环境中使用特定的演算法结构设计技术。许多研究生和同事已经以这种方式使用了两本书的部份文本。
《演算法结构设计》上架后的最近评论
编辑推荐
作者简介
演算法结构设计
演算法结构设计
这是一本被众多名校采用的演算法结构设计专业课程教科书,强调用实际示例阐明枯燥的演算法理论,更注重演算法结构设计思路而非演算法复杂度预测。两本书采用新颖的课后教学方式,通过预测真实世界的难题来激发演算法思想。两位作者以一种清晰、直接的方式,指导学生自己预测和定义难题,并从中找出适用于给定场景的演算法结构设计原则。两本书鼓励读者更深入地理解演算法结构设计操作过程,探索演算法在软件工程的更广阔领域中的专业领域。
两本书具有以下民族特色: 强调难题预测和结构设计方法;遵循结构化课后教学法,引导学生掌握难题公理化、演算法结构设计和演算法预测的全操作过程;通过一系列带答疑的难题,展示软件工程家结构设计和专业领域演算法的操作过程;包涵 200 多道工作台题,其中许多题目出自 Yahoo! 和 Oracle 等公司;提供广泛用于处理 NP 困难难题和随机专业领域的演算法,那些是极其关键的演算法主题。