码迷,mamicode.com
首页 > 其他好文 > 详细

时间复杂度计算

时间:2018-06-09 13:16:20      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:结果   初始   逆序   n+1   简单   style   插入排序   希尔   申请   

例1:

for(int i = 1;i<=n;i*=2)
{
  for(int j = 1;j<=n;j++)
  p--;
}

时间复杂度:O(n*log2n

内层循环改为 <=i 

时间复杂度:O(n2)    1+2+3...+n 等差数列前n项和

例二:

for(i = 1;i<=n;i++)
  for(j = 1;j<=i;j++)
    for(k = 1;k<=j;k++)
      p--;

时间复杂度:O(n3)

计算过程:

  1+(1+2)+(1+2+3)+(1+2+3+...)+...+..(1+2+3+...+n)

  i(i+1)/2 i从1到n 求和 n(n+1)(2n+1)/6 ???

递归的时间复杂度计算:递归的通式:T(n) = aT(n/b)+f(n)    n为数据规模

例3:T(n) = 3T(n/4)+cn2

时间复杂度:O(n2)

例4:T(n) = 2T(n/2)+1

时间复杂度:O(n)

简便算法:直接算O(nlogba )   和  f(n) 将这连个数比较 , 取结果大的一个

上面两个一样大的时候 结果为    O(nlogba  *  log2n)

名称       最好时间复杂度     平均时间复杂度     最坏时间复杂度   空间复杂度         稳定性
冒泡        O(n)正序          O(n^2)          O(n^2)逆序        O(1)           稳定
简单选择      O(n^2)         O(n^2)          O(n^2)          O(1)            不稳定
插入排序      O(n)正序         O(n^2)         O(n^2)逆序        O(1)           稳定
快排        O(n*log2 n)          O(n*log2 n)       O(n^2)有序/逆序最坏    O(log2 n)        不稳定
希尔(插入)      O(n)正序              O(n的(1.2~1.5))      O(n^2)逆序        O(1)           不稳定
归并(二路)      O(n*log2 n)                O(n*log2 n)       O(n*log2 n)       O(n)           稳定
堆排(选择)         O(n*log2 n)               O(n*log2 n)     O(n*log2 n)        O(1)           不稳定
基数排序      O(d*(n+r))                O(d*(n+r))         O(d*(n+r))       O(n+r)           稳定

 

注:

  空间复杂度 额外申请的空间 包括变量和动态申请的
  常量空间复杂度:如果我们额外申请的空间 不随着处理数据量的增大而增大 那么我们称这样的空间复杂度为常量空间复杂度记为O(1)

  稳定:数值相等的两个元素 在排序前后其相对位置未发生改变

  基数排序最稳定 d------位数 r--------桶的个数
  别的排序可能受人的写法影响稳定性
  归并排序 -----空间复杂度 如果申请了额外数组就是O(n) 没申请就是O(log2 n)
  堆排
  建立初始堆------ S = 2^(k-2)*1+2^(k-3)*2+...+1*(k-1) 错位相减 ----------------- O(n)
  排序------------- O(n*log2 n)

时间复杂度计算

标签:结果   初始   逆序   n+1   简单   style   插入排序   希尔   申请   

原文地址:https://www.cnblogs.com/Lune-Qiu/p/9158904.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!