算法--时间复杂度

时间复杂度
    但有时我们想知道它变化时呈现什么规律,想知道问题的规模,而不是具体的次数,此时引入时间复杂度。
    一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,
    若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。
    记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
    T(n)=O(f(n))
    或者说:时间复杂度就是时间频度去掉低阶项和首项常数。
    注意:时间频度与时间复杂度是不同的,时间频度不同但时间复杂度可能相同。    
    
    比如:某两个算法的时间频度是 T(n) = 100000n2+10n+6    T(n) = 10n2+10n+6   T(n) = n2    
 
    但是时间复杂度都是 T(n) = O(n2)
            
    最坏时间复杂度和平均时间复杂度    
    最坏情况下的时间复杂度称最坏时间复杂度。一般不特别说明,讨论的时间复杂度均是最坏情况下的时间复杂度。 
    这样做的原因是:最坏情况下的时间复杂度是算法在任何输入实例上运行时间的上界,这就保证了算法的运行时间不会比任何更长。
    在最坏情况下的时间复杂度为T(n)=O(n),它表示对于任何输入实例,该算法的运行时间不可能大于O(n)。 
    
    平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下,算法的期望运行时间。鉴于平均复杂度
    第一,难计算
    第二,有很多算法的平均情况和最差情况的复杂度是一样的。
    所以一般讨论最坏时间复杂度

    比如 我要求你在字典里查同一个字,告诉我这个字在字典的那一页。
    如果一页一页的翻,你需要多少时间呢?
    最优的情况就是这个字在第一页,
    最坏的情况就是这个字是 整本字典的最后一个字。
    所以即使我故意为难你,你也不会花费比找整本字典最后一个字还长的时间。
    当然,此时聪明的你就会想用部首、笔画等去查,才不要傻乎乎的一页一页翻,
    此时的你就会择优选择,因为此时你最坏得情况就是我给你部首笔画最多、除部首外笔画最多的一个超级复杂的一个字,但显然比翻整本字典快得多。
    
为了进一步说明算法的时间复杂度,我们定义 Ο、Ω、Θ符号。
Ο(欧米可荣)符号给出了算法时间复杂度的上界(最坏情况  <=),比如T(n) =O(n2)
Ω(欧米伽)符号给出了时间复杂度的下界(最好情况 >=),比如T(n) =Ω(n2)
而Θ(西塔)给出了算法时间复杂度的精确阶(最好和最坏是同一个阶  =),比如T(n) =Θ(n2)
 

转载于:https://my.oschina.net/u/4118575/blog/3044186

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值