【复杂度分析】

本文介绍了分析代码时间复杂度的关键方法,包括关注最多执行次数的代码、计算总复杂度和处理嵌套代码,以及对多项式和非多项式时间复杂度的分类。同时,还涉及了空间复杂度的概念及其在算法存储空间需求上的衡量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此为自己学习课程的笔记,供自己复习用。


前言

注意:所有代码的执行时间 T(n) 与每行代码的执行次数 f(n) 成正比。

大O时间复杂度表示法:也叫渐进时间复杂度,简称时间复杂度。它实际上并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势

  • 用大O表示法时,一般只需记录一个最大量级就可以了。比如,当代码执行次数为n2+3n+5,可以表示为O(n2)。

一、分析代码时间复杂度的方法

1、只关注循环执行次数最多的一段代码

因为我们只需要记录最大阶的量级,因此我们只关注循环执行次数最多的代码就可以了。

2、总复杂度等于量级最大的那段代码的复杂度

3、嵌套代码的复杂度等于嵌套内外代码复杂度的乘积

二、时间复杂度量级分类

可分为多项式量级非多项式量级

  • 非多项式量级只有两个:O(2n) 和 O(n!)。
  • 时间复杂度为非多项式量级的算法问题叫作 NP(非确定多项式)问题。

多项式时间复杂度:

  1. O(1):表示常量级时间复杂度。
    一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,其时间复杂度也是Ο(1)。

  2. O(logn)、O(nlogn)

如下代码:

int i = 1;
while(i <= n){
	i = i * 2;
}

要计算出上面代码执行了多少次:
20=1, 21=2, 22=4, 23=8,…, 2x=n, 求x的值
x = log2n
因此时间复杂度为O(log2n)。
统一表示为 O(logn)

  1. O(m+n), O(m*n)
    因为不知道m和n的量级谁大,所以写成两者加和的形式。

三、空间复杂度分析

空间复杂度:又叫渐进空间复杂度,表示算法的存储空间与数据规模之间的增长关系

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值