关于一系列主题的算法书籍


11

我的任务是为我们的小公司(约15人)建立有关算法的书籍库。预算超过5k,但肯定少于1万,所以我可以买很多书。这里的所有人都至少具有CS或紧密相关领域的学士学位,因此,尽管我会获得像Cormen这样的基本教科书,但我对高级主题的好书更感兴趣。(我将获得Knuth的4卷,顺便说一句。)

一些主题列表如下:

  • 排序算法

  • 图算法

  • 字符串算法

  • 随机算法

  • 分布式算法

  • 组合算法

  • 等等

本质上,我在关于CS中与算法和数据结构相关的主要主题的书籍中寻找好的建议。尤其是超出一门好学校学士学位课程的算法和数据结构课程通常涵盖的内容。我知道这个问题很模糊,因为我正在寻找通用的有用材料。我们开发的软件主要是系统级的东西,处理大量数据。

理想的选择是找到可以涵盖大多数人可能尚未听说的相当新的酷数据结构和算法的任何内容。


编辑:这是我认为应该得到的一些初步书籍:

  • Cormen等人的算法简介。

  • 算法设计,克莱因伯格,塔多斯

  • Knuth的计算机编程艺术第1-4卷

  • Vazirani的近似算法

  • Williamson,Shmoys的近似算法设计

  • Moghani,Raghavan的随机算法

  • Sipser计算理论导论

  • Arora的计算复杂性,巴拉克

  • Garey和Johnson撰写的《计算机与难处理》

  • Schrijver的组合优化

我的同事希望与其他有关语言设计,编译器和形式方法的技术和算法的书籍包括:

  • 皮尔斯的类型和编程语言

  • 贝尔的模型检查原理,加藤

  • 编译器:Aho,Lam,Sethi,Ullman编写的原理,技术和工具

  • 编译器设计手册:优化和机器代码生成,第二版,Srikant,Shankar

  • 垃圾收集手册:Jones,Hosking和Moss的自动内存管理技术


书籍,每个库应该有:*算法设计由乔恩·克莱因伯格和伊娃·塔尔多斯* 1计算机由迈克尔·西蓬瑟*计算机和顽固性的理论:一个指南,以NP完全由MR Garey和DS约翰逊理论
帕尔GD

> * Michael Sipser的计算理论导论这是一本很棒的书,但它更多地涉及自动机和语言,无上下文语言,图灵机,复杂性理论等。这不是很多关于算法
DEVID

1
哇,这是一个广泛的问题。您如何期望验证所选内容的质量和覆盖范围?你的背景是什么?贵公司从事什么工作?你有硕士或博士学位的人吗?
拉斐尔

1
主持人通知:请不要发布单书答案,请解释您为什么做出这些选择。这里有$ 5k的预算:说明您的支出方式!告诉我们您认为哪些书是必不可少的,应该进一步探讨哪些主题,您如何进行选择...
吉尔斯(Gills'SO-不要再作恶了)

您主要对设计感兴趣,还是对算法分析感兴趣?如果是这样,您是希望您的员工在理论分析方面胜任,还是希望他们精通更实用的评估效率的方法?
拉斐尔

Answers:


13

我(几乎)没有读足够的书来列举价值5000美元的书。因此,我建议您应涵盖一些文学作品,并指向选定的代表。我不能声称自己已经完全阅读了大部分书籍,因此我不得不主要依靠描述,粗略的印象和声誉。我在某种程度上已经研究或与其中的大多数人进行过合作,或者已由专家推荐它们。

我假设您希望您的员工学习可以做什么以及如何做,而不是学习他们不能做什么。特别是,我将忽略有关可计算性和复杂性理论的书籍。我希望你们的人民已经从他们的本科教育中带走了相关的信息。

  • 基础知识
    即使您的员工在某个时候已经学会了这些知识,也希望他们了解基础知识。由于诸如Wikipedia之类的资源经常不合标准或完全错误,因此您希望获得它们正确的参考文本。

    热门选择包括

    • Cormen,Leiserson等人的算法简介
      非常广泛的介绍,涵盖了许多基本算法和数据结构以及基本分析技术。经常用于教学目的的标准文本,在其第3版中可用(因此,现在应该清除大多数错误)。很多练习。
    • Sedgewick和Wayne的算法
      第四版中的另一本标准文本。没有Cormen广泛,但更多地关注实施细节。在线上有很多资料,包括Coursera上免费课程。很多练习。
    • 算法介绍-Udi Manber的一种创新方法
      主题也比较狭小,但是对教学法的注意也很高。重点是归纳策略。包含许多练习和解决方案(或至少有一些提示)。如果您因为推荐的教科书风格不佳而不喜欢它,那么它是很好的辅助参考。
    • Graham,Knuth和Patashnik的《具体数学》
      涵盖了与算法分析相关的离散数学。很少关注计算机科学的需求严格性。质量很高。有很多解决方案的练习。
  • O

  • 高级调查

    • Okasaki
      Classic和基础文献提供的纯功能数据结构通常着重于过程范式。如果要在功能范式中工作,则需要用于有效数据结构的新技术。本书是该地区的详细概述。
    • Brass的高级数据结构
      有时,基本技术还不够。这是有关高级数据结构的概述,其中包含代码和许多参考。
    • Algorithmics的硬问题通过Hromkovič
      复杂性理论告诉我们(从业人员)不要打扰找了很多自然的问题还没有确切有效的算法。有很多技术可以实际解决这些问题。这段文字向您展示了如何。
  • 专业文学

    • 编译器:原理,技术和工具,又名Aho等人
      编写的Dragon Book 如果您需要使用编译器进行构建或修改,这是该领域的 标准文字。
    • 网络流:Ahuja的理论,算法和应用程序
      许多问题都可以建模为网络流问题。这本书为您全面介绍了该领域。
    • Koller和Friedman的概率图形模型
      图形模型是为概率(尤其是概率)进行机器学习建模的主要工具。这是有关综合设施的全面概述。有一个相关的免费在线课程
    • Charras和Lecrog编写的精确字符串匹配算法手册
      在处理数据时,字符串匹配是一项非常重要的任务。本书列出了与工作有关的大多数(如果不是全部)相关算法,包括高级描述和实现。
    • Sedgewick和Flajolet
      分析组合学在同一作者的“算法分析导论”之后进行了深入的数学探讨。不是所有人,而是有兴趣的人。
    • Gusfield编写的关于字符串,树和序列的算法
      如果您不得不处理大量的字符串数据(尤其是在生物学环境中),这是一本必读的书,因为它提供了有关数据结构和算法的概述。
  • 对于从业者

    • Mattson等人的并行编程模式。
      实际上,您可能想利用多台计算机来处理大问题。本书是一个以示例为导向的高层概述,概述了如何进行组织和移动数据和计算代理的方法。它还介绍了使用现有工具实施这些方法的方法。
    • McGeoch的实验算法学指南
      当理论分析太困难或太粗糙时,您必须进行实验。介绍如何正确设计算法实验。
    • Parr 的权威ANTLR 4参考
      您经常需要特定领域的语言和工具来解析它们。ANTLR是成熟且方便的编译器生成器,这是最适合学习如何使用它的书。Parr还有其他一些有关DSL的书值得一​​看。

如果您需要最新的资料,则应考虑通过与大学图书馆合作,使人们可以访问期刊和会议记录。您实际上还可以让他们参加与他们各自相关的主题的会议。你的公司。

另外,考虑问问你的人。让他们自己进行研究(包括免费样本或网络或图书馆的副本),他们会告诉您他们认为与他们的工作相关的书籍。没有人会读来买东西没有用。


并且,当然,将他们遇到的有趣问题发送给他们。:)
拉斐尔


@Bartek:从来没有听说过,所以我不推荐。
拉斐尔

4

这是根据我认为是一本关于高级算法的好书而随机收集的高级算法的书。当然,这只是我个人的看法,还有许多其他好书。

  • Vijay V. Vazirani的近似算法
  • David P. Williamson,David B. Shmoys的近似算法设计
  • 计算几何:Ketan Mulmuley通过随机算法进行介绍
  • Rajeev Motwani,Prabhakar Raghavan的随机算法
  • Dan Gusfield的关于字符串,树和序列的算法
  • William J. Cook,William H. Cunningham,William R. Pulleyblank,Alexander Schrijver的组合优化

您绝对应该考虑Kleinberg / Tardos的书,这只是一本很棒的教科书。

您还应该知道,在某些主题上有“手册”,提供了有关某个领域的百科全书概述(例如“计算几何手册”)。由JR Sack,J。Urrutia编辑。请注意,这些手册价格昂贵。因此,购买它们可能会帮助您花费5K。


1
您说这是一个“随机”集合。您有特殊的理由推荐这些书吗?OP应该如何处理剩余的$ 4.5k?
拉斐尔

4

您没有指定公司的专业领域,因此要提供超出一般建议的内容并不容易。总的来说,我认为您列出的清单相当不错,我不会删除任何内容。只是一些补充和评论:

1)Cormen是标准文本。Sedgewick是另一种标准文本。我总是从Sedgewick,但YMMV那里得到更多。您似乎有预算。都买。

2)我没有《垃圾收集手册》的副本,但确实有一份琼斯·林(Jones&Lin)早先关于垃圾收集的调查报告的精心设计的副本。如果您打算进行任何类型的自动内存管理,则绝对应该购买该产品。

3)您也有几本关于解析和自动机理论的有用的书,但是您错过了我发现最有用的两本书(三册):Sippu和Soisalon-Soisinen的解析理论,以及Dick Grune的解析技术,实用指南。第一个是对理论的全面概述,第二个是对实践的详尽概述。(从所有方面来说,也请一并获得这本龙书。但是我敢打赌,您最终将更多地使用Grune。)

4)每个有关数据结构的库都需要Okasaki的“纯功能数据结构”的副本。我认为我从来没有读过这么多有趣的主意的书。

5)我没有Maxime Crochemore的“字符串算法”的副本,但是我希望自己拥有。高度实用,很多有用的想法。

  • Robert Sedgewick撰写的C ++ / Java / C中的算法(选择之一),第三版。两卷。Addison-Wesley,2001年。

  • Richard Jones,Antony Hosking和Eliot Moss的《垃圾收集手册》。

  • Seppo Sippu和Eljas Soisalon-Soininen撰写的解析理论。两卷:第一卷。1语言和解析;卷 2 LR(k)和LL(k)解析。施普林格(1988)。

  • 解析技术,实用指南,第二版,Dick Grune和Ceriel JH Jacobs。施普林格,2008年。

  • Chris Okasaki的纯功能数据结构。剑桥,1998年。

  • Maxime Crochemore,Christophe Hancart,Thierry Lecroq编写的字符串算法。剑桥,2007年。

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.