首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

容易描述时间复杂度和空间复杂度(转)

2013-08-10 
简单描述时间复杂度和空间复杂度(转)1、算法复杂度   ??? ?c[?i?][?j?]????????? ???c[?i?][?j?]+a[?i?][

简单描述时间复杂度和空间复杂度(转)
1、算法复杂度

  1.   ??? ?c[?i?][?j?]=????????? ???c[?i?][?j?]+=a[?i?][?k?]*b[?k?][?j?];??????}? ??
  2.  }?  ??
  3. }??

  1. {??
  2. ???sum?+=?i;??
  3. }??

  1. {??
  2. ??????{??
  3. ??????sum?+=?(i?+?j);??
  4. ???}??
  5. }??



很显然一共算了n^2次加法,那么就说这个时间复杂度是O(n^2),和上面类似,如果某个算法计算了3*n^2 + n + 1次,其时间复杂度仍然是O(n^2),因为3*n^2 + n + 1中最高的次方是n^2

所谓O(1)就是计算的次数是个常量,我们还以上面从0加到n的例子来说,如果我们用等差数列的公式,那么,代码可以这么写:
int sum = n * (n + 1) / 2
不管n有多大(当然不能溢出了),通过上面的公式只需计算一次,也就说计算的次数是不变的,这种情况的时间复杂度就可以说成O(1)。 再比如如果某个计算,不管其他条件怎么变化,均只需计算5次即可得出结果,那么这种情况的时间复杂度,也是O(1)。

5、复杂度判定
要在 hash 表中找到一个元素就是 O(1)
要在无序数组中找到一个元素就是 O(n)

访问数组的第 n 个元素是 O(1)
访问链表的第 n 个元素是 O(n)

简单的判断方法:
如果实现中没有循环就是 O(1)
如果实现中有一个循环就是 O(n)

热点排行