《算法技术手册》一2.4.5 线性对数算法的性能

2.4.5 线性对数算法的性能
性能指标很好地描述了同类算法的共同行为。为了更好地阐述算法在实践中的行为,我们定义了一个函数t(n),用于表示算法解决样本规模为n的问题所需要的时间。分治法是解决问题的一个高效方法,它将规模为n的问题划分成(大致相等的)两个规模为n/2的子问题,并通过递归解决问题。这些子问题会通过线性时间方式合并在一起来解决原先规模为n的问题。使用数学表达式可以表示为:

也就是说,t(n)包括了解决两个子问题和归并结果的费用,其中归并结果的费用不超过线性时间(即c*n)。在等式的右边,t(n/2)是解决规模为n/2 的问题的时间,按此逻辑推理,t(n/2)可以表示为:

所以最初的等式可以写为:

如果再扩展一层,可以得到:

时间: 2024-11-01 11:35:21

《算法技术手册》一2.4.5 线性对数算法的性能的相关文章

《算法技术手册》一2.4.2 对数级算法的性能

2.4.2 对数级算法的性能 酒保和顾客打了一个10 000 美元的赌.酒保说:"我会从1~1 000 000中挑选一个秘密数字,你有20次的机会来猜这个数字.每次猜完,我会告诉你结果是高了.低了,还是猜中了.如果你能在20个问题之内猜到我的秘密数字,我给你10 000美元,否则你给我10 000美元."你会打这个赌吗?回答当然是应该打,因为你能够稳赢.表2-1给出了范围为1~8的示例场景.表中展示了如何通过一系列的询问,每次将候选数据缩减一半.表2-1:在1~8之间猜数字的示例行为酒

《算法技术手册》一1.3.1 贪心算法

1.3.1 贪心算法 以下的贪心算法展示了如何找到凸包上的每个点: 1. 删除P中的最低点low--low必须在凸包上. 2. 垂直画一条穿过点low的直线,将剩余的n-1个点分别和点low连线,以垂直直线右侧的点的夹角为正值降序排列,夹角的范围是从90皛-90啊n-2是最右侧的点,而P0是最左侧的点.图1-3中显示了垂直线以及每个点与其的夹角. 3. 以{Pn-2, low, P0}这个顺序组成的点集为基础,在剩余的点中选择可以组成凸包的点--从P1开始,将每个点尝试加至这个点集的尾部,如果

《算法技术手册》一1.3.2 分治算法

1.3.2 分治算法 我们也可以将点按x坐标从左到右排序(如果x坐标相同,就按照y坐标排序),就能将这个问题分成两个稍微小一点的子问题.首先可以从点p0到pn-1,按照从左到右.顺时针的顺序计算出一个上半部分凸包,然后用同样的方法从pn-1到p0,按照从右到左.同样是顺时针的顺序计算出下半部分凸包.凸包扫描算法(将在第9章中介绍)可以计算出这些半凸包(见图1-4),然后将结果合并在一起生成最终的凸包. 图1-4:合并上.下部分凸包组成完整凸包

《算法技术手册》一导读

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

《算法技术手册》一2.4.7 性能不明显的计算

2.4.7 性能不明显的计算 在很多情况下,仅仅通过算法的描述(如加法和乘法)就可以分辨出算法的性能是线性级还是平方级的.例如,平方级的主要特征是嵌入的循环结构.但是,这样的直接分析对某些算法却无法使用.例2-5给出了GCD算法,该算法是由欧几里德设计,用于计算两个整数的最大公约数. 例2-5:欧几里得GCD 算法 public static void gcd (int a[], int b[], int gcd[]) { if (isZero (a)) { assign (gcd, a); r

《算法技术手册》一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.4 性能指标

2.4 性能指标 在比较算法时,我们使用了问题数据的规模n来评估算法的性能.这是过去半个世纪算法比较的标准方法.通过输入数据的规模评估算法的执行时间,我们可以知晓哪种算法能够更好地适应一些异常规模的问题.性能评估的第二种方法是考虑算法将会耗费多少内存或者存储空间.之后的小节详细讨论这个问题.常见的算法分类(按照效率降序排列)如下:常数级:O(1)对数级:O(log n)次线性级:O(nd),其中d < 1线性级:O(n)线性对数级:O(n log n)平方级: O(n2)指数级:O(2n)注意:

《算法技术手册》一第2章 算法的数学原理

第2章 算法的数学原理 选择算法的一个很重要的考虑因素就是算法的执行速度.计算一个算法的期望执行时间本质上是一个数学运算过程.本章将透过现象看本质,阐述隐藏在算法时间预测背后的数学原理.在阅读本章之后,读者将能够理解本书中使用到的各类数学术语.这些术语贯穿全书,也时常出现在其他算法类书籍当中.