数据结构时间复杂度

时间复杂度是用肉眼就能看出一段代码的执行效率。从效率高到效率低的几种常见表示法:

O(1)、O(logn)、O(n)、O(nlogn)、O(n^2 )
通常我们时间复杂度用大写的O表示,省略掉系数、低阶、常量。在衡量计算机算法复杂度时,科学家们不关心几倍的差别,因此,在用数学公式表达复杂度的时候,计算机科学家(高德纳)干脆删除了前面的常数因子,只保留后面的变量,他用了微积分中的一个概念大写的O的概念,所有同等复杂度的算法,都被认为它们在"大O的概念"下是相等的。

1.O(1)
void test1()
{ 
  int n = 1000; 
  int sum =0;
  for(int i = 0; i < n; i++)
  { 
    sum+=i;
  }
}
n是一个常量,是时间复杂度可以记为O(1),n如果是一个常量不管是1W、100W、1000W都可以记为O(1)。
2.O(logn)
void test2(int n)
{
  int i=1; 
  while (i <= n) 
  { 
    i = i*2;
  }
}
这里由i来决定循环次数的运行过程是2^1 2^2 2^3…2^x=n = 2^x 。
2^x=n对数相应公式转换等于 x=log2^n 时间复杂度记为O(log2^n)。
在时间复杂度中底数可以去掉,不管底数log3^n 还是log10^n 都记为logn 所以简化为O(logn)。
3.O(n)
void test3(int n)
{ 
  int sum =0;
  for(int i = 0; i < 1000; i++)
  { 
    sum+=i;
  }
 for(int k = 0; k < n; k++)
 {
  sum+=k;
  }
}
时间复杂度为O(n), 前面第一个循环可以忽略掉,取函数中,会随着变量增大的循环体来计算时间复杂度,所以是O(n)。

4.O(nlogn)
在logn 例子2中在外层再加个n的for循环,时间复杂度记为O(n logn)。

5.O(n^2 ) 嵌套循环
void test5(int n)
{ 
  
  int sum =0;
  for(int i = 0; i < n; i++)
  { 
   for(int k = 0; k < n; k++)
   {
     sum+=i*k;
   }
 }
}
这里i循环n 次为 O(n)  ,k循环n次为O(n*n),  结果为O(n)*O(n^2)=O(n+n^2) 取最大量级所以时间复杂度为O(n^2)。

以上就是一些常见的时间复杂度计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值