算法分析-时间复杂度

大O表示法用于估算算法的运行时间,忽略低阶项和常数因子,关注最坏情况下的复杂度。O(1)表示常数时间复杂度,如简单语句;O(n)对应线性复杂度,如常量步长的循环;O(Logn)表示对数时间复杂度,如指数递增或递减的循环。连续循环的时间复杂度为各循环复杂度之和。
摘要由CSDN通过智能技术生成

 时间复杂度:

-》大O表示法只是对程序执行时间的一个估算(大O是一个渐进表示法,不会去表示精确的次数,cpu的运算速度很快,估计精确的没有意义。)

-》大O表示法只保留最高阶项

-》大O表示法一般表示的是算法最差的运行时间

 时间复杂度O(1)

 直接执行一些O(1)的简单语句;不包括递归、循环

时间复杂度O(n)

 如果在一个大小为n循环中,循环变量按照一个常量C递增或递减,这个循环的复杂度就为O(n)

for(int i = 0 ; i < n ;i += c){
        //执行O(1)的语句
}
for(int i = 0 ; i < n ;i -= c){
        //执行O(1)的语句
}

如果在一个大小为n循环中,循环变量按照一个常量C的进行倍数的递增或递减,这个循环的复杂度就为O(Log  n).

1	for (int i = 1; i <=n; i *= c) {
2	      // some O(1) expressions
3	  }
4	  for (int i = n; i > 0; i /= c) {
5	      // some O(1) expressions
6	  }

---------------------------------------------------------------------------------------------------------------------------------

例:

void fun(int n) {
  int i=l;
  while(i<=n)
    i=i*2;
}

O为log2(n)

如果在一个大小为n循环中,循环变量是指数级的递增或递减,这个循环的复杂度就为O(Log log n).

1	// c为比1大的常量
2	  for (int i = 2; i <=n; i = pow(i, c)) {
3	      // some O(1) expressions
4	  }
5	  //这里的 fun 函数可以是sqrt 或 cuberoot 或任何其他恒定的根
6	  for (int i = n; i > 0; i = fun(i)) {
7	      // some O(1) expressions
8	  }

 

如何计算连续循环的复杂性?

当有连续的循环,我们计算时间复杂度为时间各个循环的复杂总和

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值