复杂度

本文详细介绍了复杂度分析的重要性,重点讨论了时间复杂度和空间复杂度的概念,包括大O表示法、常见复杂度量级、最好、最坏及平均时间复杂度,并解释了如何进行均摊时间复杂度分析。通过实例解析,帮助理解不同复杂度在算法设计中的应用。
摘要由CSDN通过智能技术生成

复杂度

复杂度分析

  1. 数据结构和算法的目标:快、省,即执行效率和资源消耗。
  2. “事后统计法”具有很大局限性,提前预估效率很重要。
  3. 复杂度分析是学习算法的精髓和分析算法的利器。

时间复杂度

  1. 假设每行代码执行时间意义,所有代码的执行时间 T(n) 和每行代码的执行次数 n 成正比。
T(n) = O (f(n))
  1. 大O时间复杂度表示代码执行效率随数据规模增长的变化趋势,也叫渐进时间复杂度
  2. 当n很大时,低阶、常量、系数并不左右增长趋势,可以省略,只需要记录最大量级。
  1. 只关注循环次数最多的一段代码.
  2. 加法法则:总复杂度等于量级最大的那一段代码。
  3. 乘法法则:嵌套代码的复杂度等于内外代码复杂度之积。
  1. 常见复杂度量级
    1. 非多项式量级: O ( 2 n ) , O ( n ! ) O(2^n),O(n!) O(2n),O(n!),称为NP算法,效率较低。
    2. 多项式量级: O ( 1 ) , O ( l o g n ) , O ( n ) , O ( n l o g n ) , O ( n k ) O(1),O(logn),O(n),O(nlogn),O(n^k) O(1),O(logn),O(n),O(nlogn),O(nk)

O ( 1 ) O(1) O(1)

int i = 1 ;
int j = 2 ;
int sum = i + j ;

常量级时间复杂度的表示方法,即便有 3 行,也是 O(1) ,并非 O(3) 。一般情况下,只要不存在循环、递归,复杂度都为 O(1) ,与代码量无关。

O ( l o g n ) 、 O ( n l o g n ) O(logn)、O(nlogn) O(logn)O(nlogn)

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

这段代码的复杂度为 O ( l o g 2 n ) O(log_2n) O(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值