数据结构与算法笔记3-时间复杂度分析

算法时间复杂度分析

基本概念:

T(n) = O( f(n) ), 其中 f(n) 为执行次数

案例分析

  1. T ( n ) = O ( n ) T(n) = O(n) T(n)=O(n)
int x = 0;
int y = 1;
int temp = x;
  1. T ( n ) = O ( n ) T(n)=O(n) T(n)=O(n)
for(int i=0; i<=n; i++)
	x++;
  1. T ( n ) = l o g n T(n)=log_n T(n)=logn
int i=1;
while(i<n)
	i*=2;
  1. T ( n ) = O ( n 2 ) T(n)=O(n^2) T(n)=O(n2)
for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
		x++;
for(int i=0; i<n; ++i)
	for(int j=i;j<n;++j)
		x++;

此时 T ( n ) = n + ( n − 1 ) + . . . + 2 + 1 = O ( n 2 ) T(n)=n+(n-1)+...+2+1=O(n^2) T(n)=n+(n1)+...+2+1=O(n2)

  1. T ( n ) = O ( n l o g n ) T(n)=O(nlog_n) T(n)=O(nlogn)
for(int i=1;i<n;i*=2)
	for(int j=0;j<n;j++)
		x++;
  1. other case
void function()
{
	for(int i=0; i<=n; i++)
		x++;
		
	for(int i=1;i<n;i*=2)
		for(int j=0;j<n;j++)
			x++;
}

此时函数的时间复杂度为 O ( n + n 2 ) = O ( n 2 ) O(n+n^2)=O(n^2) O(n+n2)=O(n2)

  1. if___else___
if(...)
{
	for(int i=0; i<=n; i++)
		x++;	
}

else
{
	for(int i=1;i<n;i*=2)
		for(int j=0;j<n;j++)
			x++;
}

此时,时间复杂度为 if分支else分支中最大的一个;

总结

  • 时间复杂度的排序依次为:
    O ( 1 ) < O ( l o g n ) < O ( n ) < O ( n l o g n ) < O ( n 2 ) < O ( N 3 ) < O ( n k ) < O ( 2 n ) < O ( n ! ) O(1)<O(log_n)<O(n)<O(nlog_n)<O(n^2)<O(N^3)<O(n^k)<O(2^n)<O(n!) O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(N3)<O(nk)<O(2n)<O(n!)
  • 时间复杂度对比曲线为:
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值