时间复杂性

     
面给出了一些常用的作为问题规模的例子:
z 在排序和查找问题中,用数组或表中元素的个数作为问题的规模;
z 在图的相关问题中,用图中的点或(和)边的数目;
z 在计算几何问题中,用顶点、边、线段或多边形的数目;
z 在矩阵运算中,用矩阵的维数;
z 在数论问题中,通常将表示输入数的比特数来表示输入大小。
最后,在分析一个算法在输入一个规模为 n 的实例时,我们是否需要将 T(n) 的精确值求
出来呢?
事实上我们在评估一个算法时并不需要精确计算 T(n) 。因为这是没有必要并且有时也是
不可能的。算法的性能好坏是通过与其他算法的比较而得出的,由于算法对小规模输入实例
所需的处理时间很少,因此小规模输入实例对性能的比较没有多大意义。我们关注的是在问
题规模很大时算法的效率差异,而当问题的规模 n 不断变大时,在函数 T(n) 中有一些部分就
会变得不重要。例如在算法 2-1 中当 n 不断变大时,算法执行的所有赋值语句对整个运行时
间的影响就越来越小。为此我们可以将这些不重要的部分忽略,转而讨论运行时间的增长率
或增长的阶。
一旦去掉表示算法运行时间中的低阶项和首项常数,就称我们是在度量算法的 渐进时间
复杂度( asymptotic complexity ,简称 时间复杂度
为了进一步说明算法的时间复杂度,我们定义 Ο、Ω、Θ 符号
在计算机资源中,最重要的就是时间与空间。评价一个算法性能的好坏,实际上就是评
价算法的资源占用问题。在这一小节中我们讨论算法运行时间的确定问题,这个问题被称之
为算法的时间复杂性。
对同一个算法而言,如果问题的规模不同,那么实
际的运算时间也会有很大差异。例如在算法 2-1 中,如果算法分别对 100 个整数排序以及对
10 9 个整数排序,其实际运行时间的差异是非常大的。假设算法中进行一比较需要 10 -8 秒,
那么对 100 个数进行排序大概需要 100*99/2*10 -8 =0.0000495 秒,而对 10 9 个数排序则需要
10 9 *(10 9 -1)/2*10 -8 =158.5 年。为此在分析算法的运行时间时我们必须将问题的规模(通常用
n 来表示)也考虑进去。显然算法执行基本操作的次数是关于规模 n 的非负函数,我们把它记
T(n)
下面给出了一些常用的作为问题规模的例子:
Ο符号
对算法 2-1 T(n) 进行分析,我们可以得到:
这时我们说算法 2-1 的时间复杂度为Ο (n 2 ) ,这个符号可以解释为:只要当排序元素的
个数大于某个阈值 N 时,那么对于某个常量 c > 0 ,运行时间最多为 cn 2 。也就是说Ο符号提供
了一个运行时间的上界。
定义 2-1 T(n) f(n) 是非负函数,如果存在一个非负整数 N 以及一个常数 c>0 ,使得:

 

 

Ω符号
Ο符号给出了算法时间复杂度的上界,而Ω符号在运行时间的常数因子范围内给出了时
间复杂度的下界。
Ω符号可以解释为:如果输入大于等于某个阈值 N ,算法的运行时间下限是 f(n) c 倍,
其中 c 是一个正常数,则称算法的时间复杂度是Ω (f(n)) 的。Ω的形式定义与Ο符号对称。
定义 2-2 T(n) f(n) 是非负函数,如果存在一个非负整数 N 以及一个常数 c>0 ,使得:

θ符号
Ο符号给出了算法时间复杂度的上界,Ω符号给出了时间复杂度的下界,而θ给出了算
法时间复杂度的精确阶。
Θ符号可以解释为:如果输入大于等于某个阈值 N ,算法的运行时间在下限 c 1 f(n) 和上限
c 2 f(n) 之间( 0<c 1 c 2 ),则称算法的时间复杂度是Θ (f(n)) 阶的。该符号的形式定义如下。
定义 2-3 T(n) f(n) 是非负函数,如果存在一个非负整数 N 以及常数 c 1 >0 c 2 >0,使得:

 

 

通过以上的分析我们可以看出:我们评价算法的运行时间是通过分析在一定规模下算法
执行基本操作的次数来反映的,并且由于我们只对大规模问题的运行时间感兴趣,所以是使
用算法的渐进时间复杂度 T(n) 来度量算法的时间性能的。Ο、Ω、Θ符号分别定义了时间复
杂度的上界、下界以及精确阶。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件源码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值