数据结构(算法时间复杂度)

算法时间复杂度:事前预估算法时间开销T(n)与问题规模n的关系(T:Time)


void loveYou(int n)	//n为问题规模
{
①	int i=1;
②	while(i<=n)
	{
③		i++;
④		printf("I love you %d\n",i);
	}
⑤	printf("I love you more than %d\n",n);
}

①---------1次
②---------n+1
③④------n
⑤---------1
T(n) = 1+n+1+2*n+1 = 3n+3 ≈ n


化简:1.只考虑高阶部分(O为同阶无穷小)
T ( n ) = 3 n + 3 ≈ n = O ( n ) T(n) = 3n+3 ≈ n = O(n) T(n)=3n+3n=O(n)
T ( n ) = n 2 + 3 n + 1000 T(n) = n^2+3n+1000 T(n)=n2+3n+1000 n 2 n^2 n2 = O ( n 2 ) O(n^2) O(n2)
T ( n ) = n 3 + 3 n 2 + 99999999 T(n) = n^3+3n^2+99999999 T(n)=n3+3n2+99999999 n 3 n^3 n3 = O ( n 3 ) O(n^3) O(n3)

比大小:(可用洛必达n-> ∞ \infty 求极限)
O ( 1 ) < O ( l o g 2 n ) < O ( n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) < O ( n n ) O(1)<O(log_2n)<O(n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n) O(1)<O(log2n)<O(n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)常对幂指阶

T ( n ) = n 3 + n 2 l o g 2 n = O ( n 3 ) T(n) = n^3 + n^2log_2n = O(n^3) T(n)=n3+n2log2n=O(n3)

化简:2.只考虑循环部分
化简:3.只考虑最深层循环

void loveYou(int n) //n为问题规模
{
  int i=1;
  while(i<=n)
 {
   i++;
   printf("I love you %d\n",i);  
   for(int j=1;j<=n;j++)   
   {
   	printf("I am your boyfriend\n");
   }
 }
  printf("I love you more than %d\n",n);
}

T ( n ) = O ( n 2 ) T(n) = O(n^2) T(n)=O(n2)


练习

void loveYou(int n)
{
	int i=1;
	while(i<=n)
	{
		i = i*2;
		printf("hhhhhhhhh");
	}
	printf("aaaaaaaa");
}

i = 2 , 4 , 8 , 16 , 32...... 2 x i = 2,4,8,16,32......2^x i=2,4,8,16,32......2x
最深层循环次数为x
循环结束时满足 2 x > n 2^x > n 2x>n
x = l o g 2 n + 1 x = log_2n+1 x=log2n+1
T ( n ) = O ( x ) = O ( l o g 2 n ) T(n) = O(x) = O(log_2n) T(n)=O(x)=O(log2n)


//flag[] 乱序存放{1——n}
void loveYou(int n)
{
	printf("aaaaaa");
	for(int i=0;i<n;i++)
	{
		if(flag[i] == n)
		{
			printf("bbbbbbbbbb");
			break;
		}
	}
}

最好情况:{ n . . . . . . 1 {n......1} n......1} ———— T ( n ) = O ( 1 ) T(n)=O(1) T(n)=O(1)
最坏情况:{ 1...... n 1......n 1......n} ———— T ( n ) = O ( n ) T(n)=O(n) T(n)=O(n)

平均情况:n出现在每个位置的概率相同为 1 n \frac{1}{n} n1
循环次数 x = ( 1 + 2 + 3 + . . . + n ) 1 n = 1 + n 2 x=(1+2+3+...+n)\frac{1}{n}=\frac{1+n}{2} x=(1+2+3+...+n)n1=21+n
T ( n ) = O ( n ) T(n)=O(n) T(n)=O(n)


时间复杂度一般只考虑最坏、平均

我的博客 AiGuitar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值