时间复杂度与空间复杂度的计算

时间复杂度

  • 算法的时间复杂度:算法速率的衡量
  • 衡量算法效率的方法:事前分析法、事后统计法
  • 时间复杂度的定义:随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同

T(n)=O(f(n))

f(n)指语句频度:一条语句的重复执行次数

  • 时间复杂度的计算步骤:
    ⅰ. 拥有最大语句频度的语句为基本语句
    ⅱ. 求基本语句频度f(n)=x
    ⅲ. 套用上方公式 T(n)=O(x)

  • 例1-求时间复杂度 [求和公式法-多循环自增]

int i,j,x=0;  
for(i=1;i<n;i++)         //1~(n-1)次  
	for(j=i+1;j<=n;j++)  //(i+1)~n次
		x++;

  • 例2-求时间复杂度 [log型-增量不为1的情况]
int i=1;k=100;  
while(i<=n)
{ k++; i+=2;}    //i的增量为2

值为:1,3,5… 按规律得: 1+2T(n)
1+2T(n)<=n
T(n)<=(n-1)/2
1/2n → n (保留最高次项,去掉系数)
∴T(n)=O(n)

  • 例3-求时间复杂度 [log型-自乘]
i=1;
while(i<=n)		//2T(n)<=n
	i=i*2

T(n)≤log2n=O(log2n)

  • 例4-求时间复杂度 [综合题-多循环+自乘]
int i,j,k;
for(i=1;i<=n;i++)
	for(j=1;j<=n;j++)
	{
		k=1;
		while(k<=n)
			k=5*k
	}

循环次数乘以log型结果
第一条循环n,第二条循环n,第三条循环log5n,答案=n×n×log5n
T(n)=O(n²log5n)

  • 常见时间复杂度比较

常对幂指阶 O(1)<O(log2n)<O(n)<O(n*log2n)<O(n²)<O(n3)<O(2n)<O(n!)<O(nn)

空间复杂度

  • 算法的空间复杂度:算法占用内存量的衡量

  • 空间复杂度:主要指辅助空间(辅助变量所占用的空间) S(n)=O(f(n))

  • 常见变量:short类型占2个字节,int类型占4个字节,double类型占8个字节
    (不同的编译器或不同版本,变量所占内存大小可能会有差异)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值