数据结构与算法必备知识点:复杂度复杂度

数据结构与算法必备知识点:复杂度

一般来说,复杂度可以分为 时间复杂度空间复杂度 ,有时还会有 编码复杂度

1.时间复杂度

时间复杂度是算法需要执行基本运算的次数所处的等级。基本运算类似于加减乘除这种计算机可以直接实现的运算。

举个简单的例子,下面是一个for循环,用来计算数组a中元素的和:

for(int i =0 ; i < n; i++){
    sum = sum + a[i];
}

就这段代码来说,for循环执行了n次,因此共有n次运算,而下面的代码加了两次a[i],因此共有2n次运算。

for(int i =0 ; i < n; i++){
    sum = sum + a[i];
    sum = sum + a[i];
}

n次基本运算与2n次基本运算当n的规模增大时的增长趋势都是相同的(都是线性增长),所以把 O(n) 称作上面两段代码的时间复杂度

再来看一段代码:

for(int i = 0; i < n; i++){
    for(int j = 0; j < n; j++){
        sum += a[i][j];
    }
}

这段代码的时间复杂度为 O( n 2 n^2 n2), 基本运算次数为 n 2 n^2 n2

在时间复杂度中,高等级的幂次会覆盖低等级的幂次,
因此 O( 3 n 2 3n^2 3n2+n+2) = O( 3 n 2 3n^2 3n2) = O( n 2 n^2 n2) 成立

除了上面这些,还有各种各样的时间复杂度。常数复杂度 O(1) 表示算法消耗的时间不随规模的增长而增长。

常用时间复杂度的大小比较:
O(1)<O( l o g n log_n logn)<O(n)<O( n 2 n^2 n2)

2.空间复杂度

和时间复杂度类似的写法,表示算法需要消耗的最大数据空间
例如对于某个算法来说,如果其消耗的最大数据空间是一个二维数组,那么这个算法的空间复杂度是O( n 2 n^2 n2)

3.编码复杂度

编码复杂度是一个定性的概念,并没有什么量化的标准。对于一个问题来说,如果用了冗长的算法思想,那么代码量就会非常巨大,其编码复杂度就会非常大。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值