复杂度分析

分析、统计算法的执行效率和资源消耗

一、时间复杂度分析

  1. 只关注循坏次数最多的一段代码
  2. 加法法则:总的时间复杂度就等于量级最大的那段代码的时间复杂度,T(n)=T1(n)+T2(n)=max(O(f(n));
  3. 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
  4. 常见时间复杂度分析:在这里插入图片描述

二、空间复杂度分析

  1. 空间复杂度和时间复杂度在分析方法上一样,区别在于时间复杂度分析的是代码的执行时间和数据规模的增长关系,空间复杂度分析的是代码的存储空间与数据规模的增长关系;

三、最好、最坏、平均、均摊时间复杂度分析

我们根据下列代码来分析

// n 表示数组 array 的长度
int find(int[] array, int n, int x) {
  int i = 0;
  int pos = -1;
  for (; i < n; ++i) {
    if (array[i] == x) {
       pos = i;
       break;
    }
  }
  return pos;
}

1.最好和最坏时间复杂度分析都是极端情况下的代码复杂度,发生的概率并不大;
2.最好时间复杂度为O(1),最坏时间复杂度为O(n);
3.平均时间复杂度分析:我们根据上面代码分析,元素x在数组中的位置有n+1种情况:*在数组的 0~n-1 位置中和不在数组中需要将每种情况下需要遍历的元素加起来,同时在数组中的和不在数组中的概率均为1/2,并且元素x出现在数组中的每个位置的概率为1/n,因此算式如下:在这里插入图片描述

四、均摊时间负责度分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值