关闭

算法效率度量:时间复杂度和空间复杂度

684人阅读 评论(0) 收藏 举报
分类:
算法效率的度量是通过时间复杂度和空间复杂度来描述的。 

.时间复杂度

   一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记作T(n),它是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。算法中的基本运算(最深层循环内的语句)的频度与T(n)同数量级,所以通常釆用算法中基本运算的频度 f(n)来分析算法的时间复杂度。因此,算法的时间复杂度也记为:T(n)=O(f(n))
   上式中“O”的含义是T(n)的数量级,其严格的数学定义是:若T(n)和f(n)是定义在正整数集合上的两个函数,则存在正常数C和n0,使得当n>=n0时,都满足0 <= T(n) <= C * f(n)。注意:取f(n)中随n增长最快的项将其系数置为1作为时间复杂度的度量。例如,fi(n) = a * n3 + b * n2 + c * n,则其时间复杂度为O(n3)。算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入数据的性质(如输入数据元素的初始状态)。例如:在数组A[0...n-1]中,查找给定值K的算法大致如下: 
 i=n-1;
 while( i>=0 && (A[i]!=k) )
        i--;  // 语句(3)
 return i;

此算法中的语句(3)(基本运算)的频度不仅与问题规模n有关,还与输入实例中A 的各元素取值及K的取值有关:

若A中没有与K相等的元素,则语句(3)的频度 f(n)=n。
若A的最后一个元素等于K,则语句(3)的频度f(n)是常数0。

最坏时间复杂度是指在最坏情况下,算法的时间复杂度。

平均时间复杂度是指所有可能输入实例在等概率出现的情况下,算法的期望运行时间。

最好时间复杂度是指在最好情况下,算法的时间复杂度。

一般总是考虑在最坏情况下的时间复杂度,以保证算法的运行时间不会比它更长。

在分析一个程序的时间复杂性时,有以下两条规则:

a) 加法规则

 T(n) = T1(n) + T2(n) = O(f(n)) + O(g(n)) = O(max(f(n), g(n)))

b) 乘法规则

  T(n) = T1(n) * T2(n) = O(f(n)) * O(g(n)) = O( f(n) * g(n) )

常见的渐近时间复杂度有:

O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn) 

.空间复杂度

  算法的空间复杂度S(n),定义为该算法所耗费的存储空间,它是问题规模n的函数。渐近空间复杂度也常简称为空间复杂度,记作S(n)=O(g(n))。一个上机程序除了需要存储空间来存放本身所用指令、常数、变量和输入数据外,也需要一些对数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间,若输入数据所占空间只取决于问题本身,和算法无关,则只需分析除输入和程序之外的额外空间。算法原地工作是指算法所需辅助空间是常量,即O(1)。
0
0
查看评论

一文搞懂算法的时间复杂度与空间复杂度

时间复杂度分析 空间复杂度
  • u010402786
  • u010402786
  • 2016-05-17 14:52
  • 3115

时间复杂度和空间复杂度详解

没有挤公交来上班过,就不知道生活的压力有多大。 算法的时间复杂度和空间复杂度合称为算法的复杂度。 1.时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算...
  • booirror
  • booirror
  • 2012-07-02 00:32
  • 164758

算法的时间复杂度和空间复杂度-总结

算法的时间复杂度和空间复杂度 1、时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪...
  • zolalad
  • zolalad
  • 2013-09-20 16:01
  • 98248

时间频度与时间复杂度

时间频度:T(n) 一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。 时间复杂度:O(f(n)) T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
  • muyimo
  • muyimo
  • 2013-09-18 11:08
  • 598

重拾算法(一):算法效率分析(空间复杂度和时间复杂度)

算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,...
  • lishuzhai
  • lishuzhai
  • 2016-08-30 20:14
  • 2331

算法度量方法——时间复杂度及空间复杂度

以前对这方面是一知半解,终于在一次大众点评的笔试中收到刺激。 步入正题:什么样的算法才是高效的算法?想必所有的人都这么想过:用最少的钱,花做最短的时间,买到最多的东西。同样,用最少的内存空间,花最短的时间解决问题的算法就是。因此我们考虑用时间和空间来衡量一个算法的效率。 首先我们来考虑如何利用时间来...
  • dd864140130
  • dd864140130
  • 2014-11-29 17:00
  • 2793

数据结构-算法效率的度量-时间复杂度和空间复杂度

度量算法的效率:时间复杂度、空间复杂度。
  • u011394362
  • u011394362
  • 2014-05-16 20:08
  • 1528

算法(一)时间复杂度

算法很重要,但是由于做移动开发并不经常用到,所以很多同学早就将算法打了个大礼包送还给了老师了,况且很多同学并没有学习过算法。这个系列就让对算法头疼的同学能快速的掌握基本的算法。过年放假阶段玩了会游戏NBA2K17的生涯模式,没有比赛的日子也都是训练,而且这些训练都是自发的,没有人逼你,从早上练到晚上...
  • itachi85
  • itachi85
  • 2017-02-09 11:48
  • 7497

算法的时间复杂度和空间复杂度-总结

算法的时间复杂度和空间复杂度-总结         通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的...
  • XiaoXiaoPengBo
  • XiaoXiaoPengBo
  • 2016-06-04 11:04
  • 23593

算法复杂度解析

摘要       本文论述了在算法分析领域一个重要问题——时间复杂度分析的基础内容。本文将首先明确时间复杂度的意义,而后以形式化方式论述其在数学上的定义及相关推导。从而帮助大家从本质上认清这个概念。 前言    ...
  • u011225629
  • u011225629
  • 2015-08-11 16:26
  • 1898
    个人资料
    • 访问:8100次
    • 积分:188
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条