【算法】算法复杂度

1、算法分析

• 算法复杂度是衡量算法难度的尺度。

• 算法需要的资源越多,复杂度越高。计算机的资源,最重要的是运算所需的时间和存储程序和数据所需的空间资源。

• 算法复杂度包括时间复杂度和空间复杂度。

• 复杂问题或高效算法一般不做算法分析,而是采用基准测试方法。

• 能够分析清楚的算法,一般是简单或低效算法;

• 难题(如货郎担问题)及高效算法很难分析清楚。

2、计算算法复杂度的困难

• 算法复杂度与问题规模大小有关;
• 输入数据的分布也会影响算法复杂度。

算法复杂度评价:
• 最好、最坏、平均;
• 通常着重于最坏情况下的算法复杂度。

精确计算算法复杂度的困难:
(1)由算法写出程序需要花费很大的精力;
(2)会因为程序写的好坏,影响算法的质量;
(3)测试数据很难对各个算法都公正;
(4)好算法需要反复改进,反复测试,工作量很大。

3、算法时间复杂度的表示

• 算法时间复杂度指程序从开始运行到结束需要的时间。
• 问题规模为n,算法需要的时间为T(n)时,T(n)称为算法的“时间复杂度”。
• 算法时间复杂度常用大O表示(读为:大圈,Order,big-O)。
• 算法时间复杂度与输入数据的规模有关。
• 如,二分查找算法复杂度是O(log n),表示二分查找需要通过log n量级的运算步骤,去查找一个规模为n的数组。
• 如,算法复杂度为O(f(n)),表示当n增大时,运行时间最多以f(n)的速度增长。也称为渐进复杂度。

常见算法复杂度级别
在这里插入图片描述
算法时间复杂度增长趋势曲线
在这里插入图片描述

4、算法时间复杂度计算案例

【案例】时间复杂度T(n)=O(1)的情况,如:
• temp=i;
• i=j;
• j=temp;
• 以上语句的频度均为1,程序执行时间是不问题觃模n无关的常数。
• 算法时间复杂度为常数阶时,记T(n)=O(1)。
• 如果算法执行时间丌随问题觃模n的增加而增长,即使算法有上千条语句,其执行时间也是一个较大的常数。
记作T(n)=O(1)
【例】时间复杂度T(n)=O(n)的情况。
在这里插入图片描述
以上算法的时间复杂度为:T(n)=2+n+3(n-1)=4n-1=O(n)。
【例】时间复杂度T(n)=O(log n)的情况。
在这里插入图片描述
设语句2的频度是:f(n),f(n)<=n,f(n)<=log n,取最大值f(n)=log n;
算法的时间复杂度为:T(n)=2log n +1=O(log n)
【例】 时间复杂度T(n)=O(n2)的情况。
在这里插入图片描述
以上算法的时间复杂度为:T(n)=2n2+n+1 =O(n2)

5、算法的空间复杂度

• 算法空间复杂度指程序从开始运行到结束所需的存储空间。
• 算法空间复杂度包括:
(1)固定部分
• 如,程序代码、常量、简单变量等占用空间。
(2)可变部分
• 如,处理数据的大小不问题觃模有关。
• 空间复杂度不时间复杂度计算方法相似;
• 空间复杂度分析相对简单,所以一般主要讨论时间复杂度。

猜你喜欢

转载自blog.csdn.net/qq_44762986/article/details/108070475