算法/前言
本书旨在成为高效算法设计和分析的入门读物。在整本书中,我们将只介绍最基本的技巧,并描述分析它们所需的严格数学方法。
涵盖的主题包括
- 分治技术。
- 在算法中使用随机化。
- 一般性的,但通常效率低下的回溯技术。
- 动态规划作为某些回溯算法的有效优化。
- 贪心算法作为其他类型的回溯算法的优化。
- 爬山技术,包括网络流。
本书的目的是向您展示如何系统地将不同的技术应用于您自己的算法,以提高其效率。虽然本书主要强调通用技术,但也深入探讨了一些著名的算法。本书的编写方式使其可以在一个学期内从头到尾阅读,其中用*
标记的部分可以跳过。
本书是关于技术的教程,而不是参考。对于参考,我们强烈推荐 [Knuth] 和 [CLRS] 的巨著。此外,有时最佳的见解来自原始资料本身(例如 [Hoare])。
一个 维基教科书 类似于开源软件项目:贡献者为项目创建内容以帮助他人,为了个人丰富,或为了完成贡献者自身工作(例如,讲座准备)的目的。
像开源程序一样,开放书籍需要时间才能完成,但它可以从读者即使是微不足道的贡献中获益良多。例如,您可以修复文本中的“错误”(错误可能是印刷错误、说明错误、技术错误、美学错误或其他错误),以制作更好的书籍。如果您发现修复错误的机会,只需点击“编辑”,进行更改,然后点击保存。其他贡献者可能会审查您的更改以确保它们适合本书。如果您不确定,您可以访问讨论页面并在那里提出问题。使用常识。
如果您想做出更大的贡献,您可以查看那些过短或需要更多工作的部分或章节,然后开始写作!一定要先浏览整本书,以避免内容重复。此外,您应该阅读 贡献者指南 页面以获得一致性提示和建议。
请注意,您不需要一次性贡献所有内容。您可以将部分标记为“TODO”,并描述待完成的工作,也许其他人会为您完成这些部分。一旦所有 TODO 项都完成,我们就将完成我们的第一版!
这本书故意保持重点狭窄,以使贡献更容易(因为这样最终目标就更清晰了)。这本书是关于算法的三本计算机科学教科书系列的第二部分,从 数据结构 开始,以 高级数据结构和算法 结束。如果您想贡献一个还没有列入这三本书中的主题,请尝试将其放在 高级 书籍中,该书籍的性质更加兼容。或者,如果您认为该主题是基础性的,您可以去 算法讨论页面 或 数据结构讨论页面 提出建议。
此外,欢迎将算法的实现作为附录。