每个人都应该读什么书?


229

[ 时间轴 ]


这个问题有同样精神的论文应该每个人都读什么应该大家观看的视频。它要求在理论计算机科学的不同领域提供出色的书籍。

这些书可能是面向数学的,但您可能会发现它对计算机科学家很有用。例子:

  • 可能性
  • 不平等
  • 逻辑
  • 图论
  • 组合学
  • 算法设计与分析
  • 计算理论/计算复杂性理论

请把每个答案都放在同一主题的书上(例如关于组合学的书)。

注意:标题可能会引起误解。澄清一下:让X和Y是计算机科学中的两个领域。每个人都有书

  • 在字段X中应阅读。
  • 在字段Y中应阅读。
  • 在两个字段中均应阅读。

此问题寻求所有3个案例。换句话说,它并不特定于后一种情况。

编辑:根据戴乐的建议,请同时强调您喜欢这本书的原因。


相关话题:


由于我无法回答这个问题,因此我将在这里进行。离散数学 -TTC:Arthur T. Benjamin的离散数学。这是一个讲座集,内容涉及从集论到图和概率论的各个主题。
Pithikos 2014年

将这本杰出的书籍清单与《计算机科学》的入门书籍清单进行比较可能会很有趣关于reddit / compsci的问题。有一些重叠,但是幸运的是差异足够明显。
Thomas Klimpel,

Answers:


91

计算复杂度:

如果您正在寻找最新的复杂性教科书。以下两个必须具备。

这两本书之间的大部分内容具有可比性。但是,存在一些关键差异:Goldreich将更多空间用于探索复杂性理论的概念和哲学基础,而Arora / Barak涵盖了更广泛的主题选择,包括复杂性,量子计算和电路下限的具体模型,这些模型大多不存在从前。

另一种选择是,较老但永恒的复杂性教科书是:

Papadimitriou的书值得注意的一章涵盖了一阶逻辑以及SNP,MaxSNP 0和APX类(近似硬度的理论基础),而现代书籍中则遗漏了这些内容。0

另一个(相对)古老但非常著名的经典是:

这是在少数几个/第一本教科书中明确包含“定理:”和“证明:”之间的“证明思想:”的教科书,并且是任何主题上写得最好的数学教科书之一。另一方面,它只是复杂性的介绍,仅将一个50页的章节专门用于“高级主题”(包括近似,概率算法,IP = PSPACE和加密)。作为有关复杂性的第一本书,或作为真正出色写作的例子,这本书非常棒

斯科特·亚伦森(Scott Aaronson)写道,这本书“充满了教科书的知识性,是一本流行书的乐趣”。它讲述了故事,并提供了许多有趣的示例和参考(生命游戏,以及许多其他图灵完整机器的示例)。它并没有深入到复杂性理论,但是具有广泛的广度。特别值得注意的是它与统计物理学的联系。


2
顺便为那些有兴趣在这些书如何相互比较,我也可以提供这种书评阿罗拉/巴拉克和Goldreich的,我最近写了SIGACT书评专栏。
Daniel Apon

1
另请参阅Lance Fortnow在亚马逊上他最喜欢的计算复杂性书籍的列表:amzn.com/l/22R1UX0Y9YRT2
Alessandro Cosentino,2010年

5
关于Sipser的书,唯一的评论是他有时在涵盖可计算性理论时会使用非标准名称。例如,他使用“可识别”而不是“半可确定”。但是我想,既然教科书使用如此广泛,到现在它可能就已经成为标准书了。
戴乐

4
PCFNP

1
我发现Sipser在实际教授复杂性理论ymmv方面比Papadimitriou有用得多。
杰夫·伯奇斯

49

NP完成度:

好吧,我想Garey和Johnson的《计算机与难缠性:NP完全性理论指南》将在此列表中排名第一。


6
30年后仍然是对复杂性理论的最佳入门。
艾米尔(Emil)2010年

1
几十年后,这本书仍然是一处最完整的NP完整问题列表,显然几乎是一本百科全书,许多CS研究人员似乎都同意这种观点
vzn 2012年

1
建议将此问题添加到FAQ中以解决一个常见问题,“我的问题X NP是否完整?” 与答案,“第一检查这本书第一,然后回到我们这里”
vzn 2012年

47

算法设计与分析:

Cormen,Thomas H.,Charles E. Leiserson,Ronald L.Rivest和Clifford Stein。算法简介。

R. Motwani,P。Raghavan。随机算法。

我发现这本书由瑞安·威廉姆斯提出的MathOverflow:算法设计通过克林伯格&Tardos

另一个出色的书是算法导论:创造性的方法迪·曼伯。本书不是算法的目录。相反,它试图为读者提供“识别抽象问题中的数学结构”的直觉。(引自评论)


7
Sedgewick和Flajolet撰写的“算法分析入门”很棒。
杰伊,2010年

丹尼尔·斯皮尔曼(Daniel Spielman)在其“算法设计和分析”课程中使用了克莱因伯格和塔多斯的书。我拿走了,真的很喜欢这本书。我发现它比CLRS更平易近人。
Alex Reinking 2015年


41

类型系统和编程语言语义:

本杰明·皮尔斯(Benjamin Pierce)的类型和编程语言以及后续的《类型和编程语言高级主题》。它们为类型理论在编程语言设计中的作用提供了扎实但可理解的概述,并使用了操作语义来表达编程语言语义。


7
对于类型理论的更数学的观点,Sorensen和Urzyczyn撰写的“关于Curry-Howard同构性的讲座”是一个很好的开始,从一开始就很好地概述了类型化的lambda演算,直到构造微积分。
多米尼克·穆里根

4
我会建议约翰·米切尔(John Mitchell)的编程语言基础课程。如先前的评论所述,它在数学上已经成熟。
Artem Pelenitsyn

2
支持TAPL。FYI Benjamin Pierce是使用Coq的新书“ Software Foundation”的作者之一。
kunjan kshetri

40

不平等:

对于计算机科学领域中想约束任何数量(因此,每个人!)的人来说,另一本有价值的书是: 柯西·舒瓦兹大师班:迈克尔·斯蒂尔的《数学不等式入门》

关于这一主题的百科全书是《不平等字典》。虽然这不是一本从封面到封面的书,但可以随时使用。另请参见本书的补充

此外,维基百科还列出了极好的不平等现象

有关特定主题,您可以咨询:


1
如果我可以添加一个链接到的东西我自己收集的(从许多不同的来源,包括上述的一些),这里是常见的不平等的备忘单:lkozma.net/inequalities_cheat_sheet
拉斯洛·科马

1
Hardy,Littlewood,Polya,“不平等”,来自1930年代的瑰宝(?)
kodlu


33

正如Sylvain Peyronnet已经提到的那样,逻辑是理论计算机科学的重要组成部分。但是,仅从纯数学家量身定制的教科书中学习逻辑是不够的。换句话说,从更“计算机科学”的角度学习逻辑也很重要。

有限模型理论

我们想学习处理有限结构的技术。这是众所周知的,由模型理论,例如,紧凑性和勒文海姆-斯科伦定理许多传统工具,是不是适用于有限的机型。这导致我们进行有限模型理论的研究。对于这一领域,我推荐以下优秀书籍:

有限模型理论的一个子领域是描述性复杂性,我们要通过定义语言所需的逻辑类型来描述复杂性类。描述性复杂性的权威参考是:

证明复杂度

在计算机科学中,逻辑的另一个重要领域是证明复杂度,它是对复杂度类,弱逻辑系统和命题证明系统之间的三种关系的研究。考虑了以下两个相关方面:(i)命题公式证明的复杂性,以及(ii)弱算术理论(称为有界算术)的研究。

方面(i)与以下问题有关:“是否存在一个命题证明系统,其中每个重言式都具有重言式大小的多项式证明?”

CVCVCC

PVPV

为了对证明复杂性进行出色的调查,我推荐以下两本书:

PV0

Krajíček的书更具挑战性,因为他假设读者已经熟悉数学逻辑和模型理论(或者愿意学习一路需要的背景知识)。但是您将从阅读和理解本书中学到很多东西。


32

随机算法:

概率与计算: Michael Mitzenmacher和Eli Upfal的随机算法和概率分析

伟大的书,解释了随机算法的基础。示例和证明非常清楚地解释,并且易于遵循。此外,练习非常有趣。

(由Marcos Villagra回答)

随机算法分析:

任何从事算法工作的人都应具有用于分析随机算法的测量集中度,也可在此处以PDF格式下载。


3
这本书是在另一个主题(我认为是Suresh)中提出的。我发现它很棒。感谢亚伦在这里提到它。
MS Dousti

29

密码学:

Oded Goldreich撰写的两卷书的《密码学基础》第1卷:基本工具第2卷:基本应用程序)是一本关于该主题的极好的书。(可以从作者的主页上获得早期草稿。)还可以提供本书的简化版本

另一本出色的书是Katz&Lindell 撰写的《现代密码学简介:原理和协议》

对于那些对密码学的数学背景感兴趣的,Hoffstein 等人的《数学密码学入门》。是自然的选择。

其他优秀书籍包括:


具体主题:


2
自从1993年引入随机预言机以来,随机预言机已在文献中得到广泛使用。特别是在签名方案中。我不知道一本书能适当地涵盖这一领域。欢迎提出建议。
MS Dousti

1
一本有关随机预言的书有很大的帮助。我不从事加密工作,但是我从前到后阅读了Katz / Lindell。由于这个特定原因,从教科书到加密文学的过渡是艰难的。另外,@ Sadeq出于好奇:您读过的任何书籍都没有很好地介绍倒带吗?
Daniel Apon

1
@丹尼尔:马丁·加涅(MartinGagné)的论文“对随机Oracle模型的研究”(加州大学戴维斯分校,2008)是对随机Oracle的相对较好的参考(尽管还远远不够完整)。关于“倒带”问题:我不知道有关这本书的书,但我想我已经完全理解了。您能详细说明一下您觉得哪一部分有问题吗?您甚至可以在另一个主题上提问。
MS Dousti

@Sadeq,我倾向于不对它提出一个独立的问题,因为它仅相当于“帮助,正在倒带什么?”。:)有问题的是,倒带不在我所学的加密课程中使用的教科书中(例如,Katz / Lindell),所以我从未见过对该概念的介绍。我知道它会定期出现在加密文学中,但是作为不积极参与加密研究的人,我怀疑我会读足够多的论文来获得对倒带的扎实理解,只是需要足够的经验。也许我可以问一个有关倒带起源的问题...
Daniel Apon

3
@Daniel:我的书《并发零知识》的介绍解释了倒带以及在协议组成的情况下倒带的困难。其他资料包括:(1)Oded Goldreich,Hugo Krawczyk:关于零知识证明系统的组成。SIAM J.计算。25(1):169-192(1996)和(2)Cynthia Dwork,Moni Naor,Amit Sahai:并发零知识。J.ACM 51(6):851-898(2004)。
阿隆·罗森

25

功能编程

  • 纯功能性数据结构克里斯·奥卡萨基。大多数有关数据结构的书都假定使用命令式语言,例如C或C ++。但是,这些语言的数据结构并不总是能很好地转换为功能语言。本书是关于以功能语言实现数据结构和算法的最佳说明之一。
  • 功能编程:实践和理论,作者:Bruce J. Maclennan。尽管它的名字,这本书更注重理论而非实践。那些读书的人比那些通过即兴编程学到这本书的人要好得多。
  • 理查德伯德的函数算法设计珍珠。关于该主题的全新展览,采用问题解决方法,并通过在功能算法的设计中展现出吸引人的思想来展示该领域的美丽。
  • 认证程序与相关类型亚当Chlipala。它是学习Coq的最佳资源之一,尤其着重于如何使用基于逻辑/规则的系统自动进行程序认证和定理证明。示例是广泛且易于遵循的。

21

近似算法

Vazirani撰写的《近似算法》是关于该主题的最佳书籍。另一本书是Hochbaum撰写的NP-Hard问题近似算法

以下是两位审稿人的比较:

我一直在使用Dorit Hochbaum的关于NP-Hard问题的近似算法的书作为我工作的指南。毫无疑问,霍赫鲍姆的书很棒。但是,调查形式损害了流程的顺畅性,有利于聚集该领域的最佳人才。Vazirani的书从头到尾都如此流畅和优雅地纠正了这一问题。优秀的问题集,对大多数问题的出色提示,并且在本书结尾处有一节专门讨论未解决的问题,这是一个非常酷的功能。

我一直在寻找与大约解决NP-complete和NP-hard问题有关的书。霍赫鲍姆还有另一本书,我也有。不幸的是,由于该书是由几位研究人员撰写的,因此它更像是一本面向研究的书。就像阅读两本精装书中的几篇研究论文一样。这意味着您需要具有某种中等水平的近似算法经验。

最近的一本书是Williamson和Shmoys撰写的《近似算法的设计》


21

组合学

入门书籍。以下任何书籍都可以很好地介绍该主题:

更高级的文本。

  • 枚举组合,Stanley 撰写的第1卷第2卷。它只是枚举组合学的杰作。非常具有挑战性,非常深刻。
  • 组合算法: Kreher&Stinson的生成,枚举和搜索。更适合于组合科学的计算机科学应用。
  • Terence Tao和Van H.Vu的加性组合。当面对与数论有关的组合问题时,这是一个非常有用的参考。

21

组合学

我想引用Philippe Flajolet和Robert Sedgewick的Analytic Combinatorics。它为算法的枚举和分析提供了强大的数学背景。我还要向两天前去世的Philippe Flajolet致敬,他是一位伟大的数学家和计算机科学家。


20

程序验证


1
有些书(Manna和Apt等人)的书比较陈旧(Manna是1977年的书,Apt等人是1991年的书),基于逻辑的程序验证领域在过去十年中取得了重大进展。las,没有可用的最新文本。
Martin Berger

@MartinBerger是否暗示了在哪里可以学到这项重大进展(如果最近的教科书中没有)?
米奇

@Mitch恐怕还没有写在教科书中。也许看一些有关交互式工具(例如Isabelle / HOL和Coq)的文献。还要看一下最近的自动验证工具,例如Facebook的“推断”及其背后的理论。
Martin Berger

Huth&Ryan非常适合初学者。对于不太熟悉CS中所有严格数学的人来说,这是一个不错的开始。这是我读到的关于CS形式方面的第一本书,从那以后我就迷上了!这也是我实际上完成所有阅读的第一本教科书。
RexYuan

19

信息论

信息理论,推理和学习算法,作者:David MacKay

有关信息论的其他著名教科书可在Wikipedia上找到。


标题是“每个人都应该读什么书?”,因此建议应具有选择性。任何人都可以从Amazon /图书馆找到大量有关“信息论”的书籍,但是如果您只有2-3种选择,它们将是什么?您只应该推荐您已经仔细阅读过的书籍或文章,并缩小到绝对的最爱!
戴乐

1
@戴乐:你是对的。我认为清单应缩小范围。(我个人负责膨胀列表!)但是,这是社区Wiki帖子。我添加了一长串建议什么是候选人的名单。请整理清单以仅包括最合适的书籍。
MS Dousti

1
@Sadeq:恐怕很少有人会精简另一个人的名单。只要该帖子仍处于当前形式,就发布的目的而言,它就一文不值。
戴乐

@戴:你是对的。但是,由于我不是“信息论”方面的专家,因此我无法自己调整清单。我可以:1)删除我总共添加的列表(保留原始列表),或2)在文本中添加一个通知以引起专家的注意。你有什么建议?
MS Dousti

@Sadeq:我也不从事信息理论研究,否则我将帮助减少名单。我知道这本书“ Thomas M. Cover,乔伊·托马斯(Joy A. Thomas)。信息论的要素”受到包括兰斯·福特诺(Lance Fortnow)在内的许多人的推荐。但我不确定是否每个人都应该阅读。我认为我们应该尊重原始海报,因为这本书可能是他最喜欢的。因此,删除整个列表是一个不错的选择。我真的很直率的道歉。还可以请人们解释为什么他们建议自己的书吗?
戴乐

19

分布式算法

Nancy Lynch的分布式算法这是由分布式计算的先驱编写的经典文章;

Gerard Tel的分布式算法介绍非常好的介绍,也适合于本科课程;专注于消息传递模型

Hagit Attiya和Jennifer Welch的分布式计算:基础知识,模拟和高级主题。讨论了消息传递和共享内存模型

Nicola Santoro 的分布式算法的设计和分析相对较新的书籍,可以用于本科生和博士学位。介绍的材料着重于协议设计


19

量子计算

  • 量子计算和量子信息尼尔森和庄,是一个伟大的参考书籍,非常适合那些谁想要在该领域研究。但是,对于初学者来说,这是很难学习的,而且绝对不是自学的。由于该书缺少可行的示例,因此建议以下本书:

  • 量子计算由于德谟克利特斯科特·阿伦森。与量子计算有关的远不止于此,它与物理学,哲学等有关系。

关于该主题的其他两本出色的入门书籍是:



17

沟通复杂度:


Eyal Kushilevitz和Noam Nisan的交流复杂性

这是一本经典且写得很好的书。尽管到现在已经有点老了,但仍然是该领域的最佳入门书籍。另外,这些练习非常有趣,并且在解释了概念之后才给出练习,以便您可以修正刚学到的内容。

随机通信复杂性部分应与第一本书的部分进行补充。


通讯复杂性和并行计算,作者:JurajHromkovič。

非常完整,尽管有时有点难以阅读。直观的解释非常清楚,而且练习很好。在第二部分中,介绍了与并行计算的连接。


16

再一个,伟大的布尔傅立叶分析(如标题所暗示的),并涵盖的基本知识,更高级的主题和(多)的应用,是布尔函数的分析,由Ryan奥唐奈(2014)。它也可以在这里免费在线获得。
Clement C.

16

计算代数

正如希瓦(Shiva)在回答中所说的那样,该领域的文献散布在各处,没有通用的术语。通过搜索“符号计算”,“代数复杂性理论”,“计算机代数”或“计算代数”,可以找到有用的参考。如对这个问题的答案所建议,

计算分析

一个有趣的领域,也涉及实函数的计算。也称为“可计算分析”或“可计算演算”。


16

组合学

generatingfunctionology,赫伯特S.维尔夫,是一个很好的介绍的生成函数的理论,写在一个平滑的方式和填充有练习。如果他像这样写他所有的书,我迫不及待要开始写另一本书。

理查德·斯坦利(Richard Stanley)的枚举组合是一个很好的参考书(高级)。

组合学: Peter Cameron的主题,技术,算法以及Matousek和Nesetril的“ 离散数学邀请”是组合学的很好的介绍。

Roberts和Tesman撰写的Applied Combinatorics是有关Applied Combinatorics的百科全书参考。



14

3
这与G. Polya的“如何解决”有什么不同?我认为我已阅读了Polya是原始的并且更好的建议,但我不确定并且无法在Internet上重新引用它;)
DaveBall aka user750378 2011年

2
Polya的“如何解决问题”(HTSI)与Velleman的书讨论的主题不同。Polya是关于如何找到难题的解决方案的一种反思,而Velleman是关于如何使用数学惯例和语言形式化解决方案的教科书。HTSI确实具有有关证明的信息,但是它以某种“词汇表”的形式呈现,没有任何结构,而Velleman为您提供系统的课程和练习。两者都值得一读,但是一个不能替代另一个。
Nate CK

13

数论

我发现许多论文经常引用几本书。他们在这个主题上很出色,但是其中一些人已经很老了。这是我记得的清单:


您如何看待罗森的书或《多佛》的再版本?
Mark C

@Mark:他们也很好。为什么不编辑帖子,并同时添加这些书籍?
MS Dousti 2011年




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.