理论CS和数学-自学建议


14

我是非CS毕业生,并且我的研究领域与CS无关。但是,作为成为计算机科学家的更大计划的一部分,我希望获得与CS相关的理论计算机科学和数学方面的扎实背景。我进行了大量研究,并选择了以下关于CS和数学的最佳/非常好的书籍,并希望就以下方面提出您的意见:

  • 所涵盖主题的完整性(请推荐我错过的任何内容)
  • 覆盖的材料/杀伤力较大的区域重叠(请推荐应从清单中删除的书籍)
  • 学习书籍的顺序(我以应该学习的顺序列出)

该列表感觉太长了,因此,我建议删除一些书籍,而又不会失去CS所需的核心知识。

因此,这些书是:

  1. WW索耶(WW Sawyer)的《数学家的喜悦》
  2. 如何证明它:Daniel J. Velleman的结构化方法
  3. 如何解决:G。Polya数学方法的一个新方面
  4. 格雷格·迈克尔森(Greg Michaelson)通过Lambda微积分进行函数式编程的简介
  5. Al Aho和Jeff Ullman撰写的计算机科学基础(http://i.stanford.edu/~ullman/focs.html)
  6. 具体数学:Graham,Knuth和Patashnik的计算机科学基础
  7. Michael Sipser的计算理论导论
  8. John E. Hopcroft,Rajeev Motwani,Jeffrey D. Ullman对自动机理论,语言和计算的介绍
  9. 计算复杂性:概念观点,作者:Oded Goldreich
  10. 计算复杂性:现代方法,Boaz Barak的Sanjeev Arora
  11. RM Wilson的JH van Lint撰写的组合课程
  12. 可计算性:Nigel Cutland的递归函数理论导论
  13. 计算机与顽固性:NP完全性理论指南,作者:Johnson MR Garey
  14. 递归函数理论和有效可计算性Hartley Rogers
  15. GH Hardy,JE Littlewood和G.Polya的不平等现象
  16. 数学逻辑:一门练习课程(第一部分):命题微积分,Bookean代数,RenéCori的谓词微积分,Daniel Lascar
  17. 数学逻辑:一门练习课程(第二部分):递归理论,Godel定理,集合论,模型论(作者RenéCori,Daniel Lascar)


如果您还没有该主题的经验,请从一本已知的算法书开始。
2012年

@Bartek:谢谢,但这是我之前编译列表时所考虑的问题之一。我的问题更多是关于如何从实践中阅读所有出色的材料。时间总是一个约束,所以我想知道什么书我“而不是”读为避免重复,等等
CSLover

@AJed:您是否建议从列表中的第5本书开始,而不是一些第1-4本书?我相信#5对算法和数据结构进行了简要介绍。
CSLover

这里太多了。我会选择一个然后走,然后担心到那里时接下来会发生什么。我可能会建议Sipser为想要扎实的CS基础知识的初学者入门。
usul 2012年

Answers:


10

您的清单非常有问题。

首先,我会完全跳过第6、11、12、14、15、16、17本书:第6、11和15是通用数学,除非您成为理论研究者,否则并不需要。第12和14本书涵盖了不是计算机科学的递归理论(即使它涉及可计算性!)。第16和17册涵盖了逻辑的高级主题,而您只需要了解非常基本的逻辑。

在本书1,2,3中,我只选择其中一本作为数学和证明的一般介绍。

书籍5,7,8,9,10,13涵盖了几个主题:自动机理论,算法和复杂性理论。让我建议您遵循关于自动机理论和复杂性理论的Sipser(第7章),以及关于算法的Cormen,Leiserson,Rivest和Stein的“算法简介”(“ CLRS”)。

第4本书涉及函数式编程。尽管我的计算机科学教育从未包含任何有关此主题的课程,但可以说,许多理论计算机科学的研究人员都将函数式编程视为必不可少的基础。

总结:剩下的就是

  • 第1-3本书之一(或任何类似的“证明简介”文字)
  • CLRS
  • 第四册(函数式编程)
  • 书籍7(自动机理论和复杂性理论)

非常感谢您的如此详尽的回应。我知道这个列表太多了,但是阅读针对计算机科学家的各种书籍建议后,您的清单就会很长。您的建议非常实用,这就是我所追求的。非常感谢!!
CSLover

1
我不同意“不需要数学”的建议。选择计算机科学的任何方面,我将向您展示如何需要数学。您学习的数学越多,您的生活就越好。另一方面,不上学就几乎不可能独自学习真正的数学。因此,专注于计算机科学可能会更好,因为它更容易学习。
安德烈·鲍尔

5

您可能还考虑利用许多可用的在线课程中的一些。例如,斯坦福大学麻省理工学院提供(免费)计算机科学在线课程,我认为还有许多其他课程可供选择。

就书籍而言,我对尤瓦尔的建议仅次于其,除了《 CLRS》是一个很好的参考书,但作为一本入门书籍,供您坐下来阅读时,它有点不知所措。对于算法部分的第一遍,我可能会推荐Dasgupta等人的算法。。上一个链接是免费的在线预印本,但平装本也很便宜。


好。感谢您的回复。非常感谢你。
CSLover

2

您建议的参考资料将使“非常”理论的计算机科学家成为可能。但老实说,如果您是非CS学位的人,那么阅读这些书并没有任何好处。这当然取决于您的需求。

我发现有些书,例如Book 14、15、16、17等,并不是供计算机科学家使用的。本书3冗长。这对任何学生来说都是通用的。因此,我认为第一本书和第二本书是相同的。

对我来说-与您本来不是计算机科学家(而是电气/计算机工程师)的情况相同-我提出了两个初始方向:

  • 算法设计和分析,(很多人都建议使用CLRS算法入门。它是一个很好的参考,但我确实不是它的粉丝,一开始它很难理解它,有时很冗长。我建议您请遵循其目录,然后从那里检查在线课程以获取更清晰的参考资料。

---确保掌握一种编程语言来实现您所学习的算法和数据结构-因此,我建议您 Sedgewick算法(令人惊叹!)

---加:我也建议这本书:组合算法:D. Kreher的生成,枚举和搜索。这是一本非常好的书。对于算法中的许多问题,您将有不同的见解。

  • 组合数学(尤其是图论),由威尔逊RM JH van Lint撰写的《组合课程》非常好。存在许多其他参考。通常,任何一本著名的《组合学》书籍都足够-您可以从互联网上的其他参考文献中获得其他所有内容。我个人很喜欢:peter j cameron组合学以及Bondy和Murty图论。

  • 下注概率(总是必要的)。令人惊讶的是,科学中的许多领域都没有使用概率。但是相信我,您所需要了解的只是基础知识。

然后:许多称自己为理论计算机科学家的研究人员非常关注计算理论(自动和其他)。有一些不错的书籍(请参见Yuvul Filmus帖子),

Aho和Ullman很好(实际上,Ullman的所有书籍都很好)。使自己适应编译器设计(请参阅http://infolab.stanford.edu/~ullman/ullman-books.html)。

之后:这一切都取决于您要做什么。您可以采取不同的方向:1)数据库,2)模式识别和数据挖掘,3)分布式算法,4)编程语言的基础,4)随机化算法以及许多其他方法。[每个都需要另外一个帖子], 但请尝试对所有概念有所了解!

* 一般想法:如果您不熟悉CS,请尽可能多地使用CS子域。将自己限制为“理论”将使您失去大量的CS创造力!*(我的看法)


对我来说函数式编程。不要使用您引用的旧书。当前行业中需要功能语言。互联网上存在一些有关诸如Scheme,Haskel和Erlang等语言的教程。不要太理论化,这是我的建议。
2012年

所有好的评论。我的目标是设计一个完整的自学计划,这个问题仅涉及计划的一部分,我认为这是组织起来最具挑战性的。其他领域包括:数据结构和算法,计算机体系结构,操作系统,网络,安全和密码学,并行性,形式方法,人工智能,图形和模拟,数据库,编程语言,编译器,软件工程,最后是Unix哲学和管理。大多数的这些我觉得都还根本CS,但将保证一个单独的问题
CSLover

您的最佳技巧是算法设计和分析的坚实基础。-其他每个字段都是算法设计和分析的子字段。
2012年

您是否会友善并澄清您推荐的Sedgewick算法书?他有一个叫做“算法”的东西,但这不是系列。他还拥有“ C ++算法”(或其他语言),我相信这是2本书,共5部分。
CSLover

我使用的是C ++。不过,我将它们用作参考。这是他的网站cs.princeton.edu/~rs
2012年
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.