《算法技术手册》一3.1 算法模板的格式

3.1 算法模板的格式

使用模板来描述算法的好处在于可以很方便地对比各种算法的相似和不同之处。本书中的每种算法都会遵照模板格式使用固定的小节进行展示。如果某个小节不适用于当前算法或者没有什么价值,就会略去。

3.1.1 名称

算法的描述性名称,用来方便区分其他算法。例如,当我们讨论顺序搜索时,这个名称可准确表达所讨论的是哪种搜索算法。算法的名称永远用粗体表示。

3.1.2 输入/输出

描述输入/输出数据的格式和结构。

3.1.3 使用环境

使用环境一节描述了算法的最佳使用时机和场所,还有成功实现算法所需要关注的一系列要点。尤其是问题的某些关键特性会决定算法的选择。

3.1.4 解决方案

算法以及一段可运行的且附有注释的代码。所有的代码都可以在代码库中找到。

3.1.5 算法分析

对算法的大致分析,其中包括性能数据以及其他帮助理解算法行为的数据。这部分并不是想“证明”算法理论上的性能,而是帮助读者理解为什么算法会这样做。我们同样提供了一些参考文献,这些文献里面包含了大量的数学定理和证明过程,用于帮助读者理解为什么算法的实际运行结果与理论相一致。

3.1.6 衍生算法

阐述了算法的衍生版本或者完全不同的替代算法。

时间: 2024-09-17 03:14:30

《算法技术手册》一3.1 算法模板的格式的相关文章

《算法技术手册》一3.2 伪代码模板的格式

3.2 伪代码模板的格式 本书中的每个算法都可以用主流的编程语言实现,例如Python.C.C++ 和Java.由于有些读者不熟悉这些语言,我们会先用伪代码描述算法,并辅以一个小例子来解释运行过程.下面的例子给出了描述算法性能的模板,它包含算法名称,以及第2章中所述的算法的三个性能指标(最好情况.平均情况和最坏情况).伪代码的描述应当尽可能得简洁.其中关键字和函数名称用粗体字表示,所有变量采用小写字母,数组名称大写,元素采用A[i]这样的表示形式.条件语句和循环语句需要缩进.在阅读代码实现之前,

《算法技术手册》一导读

前言 修订一本书向来都是一项艰巨的任务.我们既希望保留第1版(于2009年出版)中的精华,也希望弥补其中的一些不足并增加一些新的篇幅.在第2版中,我们延续了第1版中列出的原则,包括: 使用实际代码而非伪代码来描述算法. 将算法独立于解决的问题之外. 恰到好处地介绍数学知识. 以经验主导支撑数学分析. 在更新修订过程中,我们精简了文字描述,简化了一些布局,从而有助于补充新的算法和其他内容.我们相信,从概括的角度介绍计算机科学的一个重要领域,会对实用软件系统有着深远影响. 第2版的变动 在修订过程中

《算法技术手册》一2.2 函数的增长率

2.2 函数的增长率 我们将算法执行时间的增长率描述为一个与输入问题样本规模相关的函数.使用这种方法描述算法性能会比较抽象,因为它忽略了大量的细节问题.所以,在使用这种方法时,需要对抽象背后的细节有一个清醒的认识.程序都必须运行在某个平台上,在这里,广义的平台定义包括: 运行程序的计算机,包括CPU.数据缓存.浮点运算单元(FPU)以及其他芯片特性. 程序编写所使用的编程语言.编译器/解释器以及用于生成代码的优化设置. 操作系统. 其他后台进程. 改变上述组成平台的任何条件都只会对程序的执行时间

《算法技术手册》一2.4.3 次线性级算法O(nd)(d<1)的性能

2.4.3 次线性级算法O(nd)(d<1)的性能 在某些情况下,次线性算法的性能要好于线性算法,但还是不如对数算法高效.第10章将会讨论多维k-d树,它能够高效地划分n个d维的点.如果k-d树是平衡树,那么区间查询的性能为,在二维的情况下,最终性能为O(sqrt(n)).

《算法技术手册》一2.3.4 上下界

2.3.4 上下界 在本书中,我们简化了"大O"表示法,目的是对不同问题样本在持续增长的规模n下算法性能进行分类.这种分类使用O(f(n))表示,其中f(n)是一些如n.n3或者2n的常见函数.例如,假设存在一个算法,当输入数据规模"足够大"时,它在最坏情况下的性能绝不大于和输入问题样本规模成比例的某个值.更加精确地说,对于所有的n > n0,存在某个常数c > 0,满足t(n) ≤ cn ,其中n0是每个问题样本"足够大时"的基本点

《算法技术手册》一3.5.1 算法名称和摘要

3.5.1 算法名称和摘要 Graham扫描算法可以计算出笛卡儿空间给定点集的凸包.它首先会寻找输入集P中的最低点low,然后将剩下的点{P-low}按照和low的极角从大到小排序.之后算法会按序遍历这些点构建凸包,如果凸包上最新的三个点构成一个左拐,那么最新加入的点就需要被删除掉.

《算法技术手册》一3.5 算法举例

3.5 算法举例 我们将通过Graham扫描算法来介绍本书的算法模板.该算法可以用于计算二维空间上给定点集的凸包(第1章已经介绍过这个问题,并在图1-3中予以说明).

《算法技术手册》一2.1 问题样本的规模

2.1 问题样本的规模 问题样本是解决问题的程序所使用的特定输入数据集.在大部分问题中,随着这一数据集规模的增长,程序的执行时间也在不断增加.同时,过度地对样本数据进行编码(可能使用了压缩技术),可能会不必要地降低程序的执行效率.寻找一种最优的样本编码方式是极其困难的,因为问题发生在复杂的现实世界,而且还需要进行合理的翻译才能被程序求解. 在评估算法时,我们会尽量假定问题样本的编码并不是影响算法效率的决定性因素.问题样本的表现方式应当仅仅依赖于待执行操作的类型.设计高效的算法通常从选择一个合适的

《算法技术手册》一3.5.4 解决方案

3.5.4 解决方案 如果手动计算凸包,你应该可以很轻松地处理好各种极端情况.但是如果需要用计算机语言来描叙每一个步骤,我们可能会觉得比较困难.Graham扫描算法的关键点在于计算和最低点的极角大小.一旦计算并且排序之后,算法只需要遍历所有的点,不断地构建凸包并且根据新发现的信息调整结构即可.代码见例3-1. 例3-1:Graham扫描算法的实现 public class NativeGrahamScan implements IConvexHull { public IPoint[] comp