pascal.时间复杂度的计算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

时间复杂度的计算

当我们评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度,因此,在算法分析时,往往对两者不予区分,经常是将渐近时间复杂度T(n)=O(f(n))简称为时间复杂度,其中的f(n)一般是算法中频度最大的语句频度。此外,算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相关。但是我们总是考虑在最坏的情况下的时间复杂度。以保证算法的运行时间不会比它更长。

常见算法时间复杂度:

O(1):表示算法的运行时间为常量

O(n):表示该算法是线性算法

O(㏒2n):二分查找算法

O(n2):对数组进行排序的各种简单算法,例如直接插入排序的算法。

O(n3):做两个n阶矩阵的乘法运算

O(2n):求具有n个元素集合的所有子集的算法

O(n!):求具有N个元素的全排列的算法

优<---------------------------<劣

O(1)

时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、

线性对数阶O(nlog2n)、平方阶O(n2)、立方阶O(n3)、……k次方阶O(n k)、指数阶O(2n)。

考察下面三个程序段:

例1x= x+1;

例2 for i=1 to n

x= x+1;

例3 for i:=1 to n

for j=1 to n

x= x+1;

其时间复杂度分别为O(1)、O(n)、O(n2)。分别称为常量阶、线性阶、平方阶。

算法中还可能呈现的时间复杂度有:对数阶O(log n)、指数阶O(2n)等。

各种排序的时间复杂度:

选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,

冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。

冒泡法:

这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡:复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。

直接插入排序:O(n*n)

选择排序:O(n*n)

快速排序:平均时间复杂度log2(n)*n,所有内部排序方法中最高好的,大多数情况下总是最好的。

归并排序:log2(n)*n

堆排序:log2(n)*n

希尔排序:算法的复杂度为n的1.2次幂

下面是一个总的表格,大致总结了我们常见的所有的排序算法的特点。

排序法平均时间最差情形稳定度额外空间备注

冒泡O(n2) O(n2) 稳定O(1) n小时较好

交换O(n2) O(n2) 不稳定O(1) n小时较好

选择O(n2) O(n2) 不稳定O(1) n小时较好

插入O(n2) O(n2) 稳定O(1) 大部分已排序时较好

基数O(logRB) O(logRB) 稳定O(n) B是真数(0-9),R是基数(个十百)

Shell O(nlogn) O(ns) 1

快速O(nlogn) O(n2) 不稳定O(nlogn) n大时较好

归并O(nlogn) O(nlogn) 稳定O(1) n大时较好

堆O(nlogn) O(nlogn) 不稳定O(1) n大时较好

相关文档
最新文档