算法/贡献者指南
外观
< 算法
本书是关于数据结构和算法的三本教科书系列的一部分
- 数据结构—适合作为数据结构入门课程的书籍,介绍了最常见的数据抽象及其构造和属性。关于关键点的教程。
- 算法—适合作为算法入门课程的书籍,介绍了最常见的算法技巧以及如何分析算法。假设对数据结构有一定了解。关于关键点的教程。
- 高级数据结构和算法—涵盖更高级内容的书籍,假设对数据结构和算法有一定了解。前两本书是教程,而这本书更多的是参考性质的。因此,它的内容可以更加多元化。不属于前两本书教程性质的更高级(和有趣)的内容应该放在这本书里。
这些书籍之所以组成一个系列,是为了帮助缩小它们的范围并协调工作。最终目标是为每个计算机科学主题提供书籍。
- 如果您想修复错误,只需点击“编辑”,进行修改,然后点击保存。我们会审核这些修改,确保它们适合本书。如果您不确定,可以访问“讨论”页面并提出疑问。一般来说,要进行小的更改,不需要先询问,你可以使用常识来判断你的更改是否合适。
- 如果您想编写章节、部分或部分章节,请查看标记为“TODO”标签的项目并从那里开始。
- 请务必先阅读本书的所有其他章节,以避免内容重复。
- 编写章节时,您可以将某些部分标记为“[TODO: 解释]”,其中 解释 描述了您希望在该部分发生的内容。例如,如果您不擅长制作图像,您可以将图像的描述作为 TODO 项目。也许擅长制作图像的人会注意到这一点并为您提供一个。TODO 项目的目的是给出要写什么内容的计划。
- 这是一个教程:我们不是要创建包含所有已创建算法的百科全书,也不是要展示特定算法的绝对最佳版本。
- 不要在书籍章节中包含指向维基百科文章的链接:我们的想法是让每一本书都自成一体,这样读者就可以打印出书籍并单独阅读,而不必在线浏览。
- 本书使用一种伪代码语言,对于熟悉 Algol 家族语言(包括 C、Java、Pascal 和 Python)的人来说应该足够熟悉。它包含一些额外的功能,有助于抽象掉琐碎的实现细节,从而可以传达真正的算法思想,而不是专注于依赖于语言的琐碎实现问题。
- 非伪代码的实现可以在附录中编写。这些实现可以供读者使用,并可以消除任何可能的歧义。实现应该经过充分测试并包含测试用例。实现语言为 Python、C、Java 和 Scheme。
- 如果该部分呈现的材料对于理解章节的整体要点来说并不重要,则在章节或小节标题旁边加一个星号(“*”)。(例如,更初级的读者可以选择跳过或略读这些章节。)
- 尽可能使用原始来源。如果您确实使用了参考资料,请将其放在参考资料部分。未经许可不得复制内容。此外,请注意,即使一些 GFDL 内容使用不同的许可版本(并非所有内容都向前兼容),也应未经许可不得复制。
- 将维基百科用作材料的另一个来源,但编辑材料以仅呈现主要要点和想法:维基百科的百科全书式细节在试图学习基本概念时会分散注意力。
- 对于一些短语,可以使用数学上的“我们”这种尊称,但尽可能使用第二人称“你”:这使得句子更容易构建,而且听起来也更直接。
- 寻找对理解算法或软件工程流程中某个部分的见解。
- 避免使用被动语态(“这篇文章是我们写的。”)。相反,尝试使用主动语态(“我们写了这篇文章。”)。
- 不要使用“this”作为代词,只将其用作形容词。
- 应该创建并大体上达成共识的目录。这样的目录将为本书的范围设定一个基准。当然,以后可以进行更改。( 已完成:目录大体上已得到贡献者的认可)
- 在章节划分之后,应该设计好章节和部分,使用 TODO 项目来描述要在该部分放置的内容。( 已完成)
- 应该首先编写最重要的概念,以便为其他材料的构建提供一个锚点和上下文。( 正在进行中:加入我们!)
- 实现算法的 C、Java、Python 和 Scheme 版本并将其放在附录中。( 仍然 TODO...)
- 类似于开源项目,应该添加越来越多的“功能”(即章节和部分)。此阶段将在完成第一版里程碑后进行。但是,在对第二版进行改进时,不应忽视核心项目。( 仍然 TODO...)
编写书籍需要时间和奉献精神,但如果您已经走到了这一步,它很可能是值得的。正如免费软件程序不会从树上掉下来一样,完整的开放书籍也不会自己写出来。