【一条公式引入复杂性】
【概述】
目前公认的算法复杂性的理解即算法所需要的计算机资源。我们引入几个复杂性概念:
-
时间复杂性
:在计算机中执行算法需要的时间资源量 -
空间复杂性
:在计算机中执行算法需要的空间资源量 -
问题规模
: 算法的待解空间即:输入的大小
如果分别用N、I和A表示算法要解问题的规模、算法的输入和算法本身, 而且用C表示复杂性,那么, 应该有:
而一般把时间复杂性和空间复杂性分开,并分别用
(通常将
【计算推导】
在算法中,我们假设元运算有
执行元运算时间分别为:
假设用到元运算的次数分别为:
其中:
那么则有:
由于不可能对规模为N的每一种合法输入I都去统计运算次数,只能在某些代表性的合法输入中进行统计。于是我们将
【进一步引入复杂性】
上文中我们已经知道
三种情况下的时间复杂性:
-
最坏情况:指问题规模为
时任何输入中的最长运行时间。其数学表达如下:
-
最好情况:指问题规模为
时任何输入中的最短运行时间,其数学表达如下:
-
平均情况:指问题规模为
时任何输入中的平均运行时间,其数学表达如下:
其中:
-
是规模为 的合法输入的集合 -
是 中使得 达到 的合法输入 -
是 中使得 达到 的合法输入 -
是算法的应用中输入 出现的频率
其示意图如下图所示:
补充:
关于最坏情况的时间分析:
-
它是算法对于任何输入的运行时间的上界;
-
对于某些算法, 最坏情况常常发生, 如在DB中搜索一个并不存在的记录;
-
平均时间往往和最坏时间相当(常数因子相同).
关于平均运行时间:
-
常常假定一个给定问题规模的所有输入是等概率的. 实际上这种可能并不一定成立,但可以用随机化算法强迫它成立.
-
有时平均时间和最坏时间不是同数量级, 算法选择依据是: 最好、最坏的概率较小时,尽量选择平均时间较小的算法.
【复杂性的进阶分析-渐进性态】
定义如下:
设
如果存在一个函数
使得当
那么我们称
在数学上
当n充分大时我们用
例如
若进一步假定算法中所有不同元运算的单位执行时间相同, 则可不考虑
【渐进分析记号定义】
-
渐进上界:
-
渐进下界:
-
非紧上界:
等价于:
-
非紧下界:
等价于:
结合上述得出:
-
紧渐进界:
定理:
【渐进分析记号的意义】
-
的确切意义是: -
一般情况下,等式和不等式中的渐进记号
表示 中的某个函数。
如:
-
等式和不等式中渐进记号
的意义类似
【关于 的解释】
大 表示法(算法运行的上界):
若存在正常数
图像表达如下:
注意:
当说一个算法具有
所以, 从计算时间来说,
例如:
运算法则:
【常见的复杂性函数】
function | name |
---|---|
constant | |
|
logarithmic |
log-square | |
linear | |
N log N | |
qiadratic | |
cubic | |
Exponential |
【不同规模数据复杂度对比图】
小规模数据复杂度示意图
中等规模数据复杂度示意图
【不同算法输入量上界】
【提高计算机速度对算法的优化效果】
【常见的算法时间复杂性函数对比】
【一些结论】
结论: 算法的渐近复杂性的阶对于算法的效率有着决定性的意义.
多项式复杂度的算法:
如果一算法的最坏情形时间复杂度
计算机科学家普遍认为, 一个多项式复杂度的算法是有效算法, 即: 对于一个有效算法, 哪怕输入量很大, 计算机仍然可以处理得了.
【参考资料】
-
2019年广西师范大学计算机与信息工程学院算法设计与分析课件[OL].李志欣教授.2019.01.01
[…] 1、时间复杂度分析 20190201 20190216 20190217 […]