算法与数据结构-1、复杂度分析

1、如何分析代码的复杂度

简单来讲,代码复杂度指的是代码的执行效率,复杂度越高,执行效率越查
一般用以下三种方法来分析代码的复杂度

  • a.只关注循环次数最多的一块代码
  • b.加法法则
  • c.乘法法则

几种常见的复杂度分析

  • 常量阶 O(1)
  • 线性阶 O(n)
  • 对数阶 O(logn)
  • 线性对数阶 O(nlogn)
  • 平方阶O(n2)、立方阶等 O(n3)…K次方阶O(nk)
  • 指数阶O(2n)
  • 阶乘阶O(n!)

2、最好、最坏、平均、均摊时间复杂度

eg:

int array[] = new int[10]; 
int len = 10;
int i = 0;
// 往数组中添加一个元素
void add(int element) {
 if (i >= len) { // 数组空间不够了
 // 重新申请一个2倍大小的数组空间
 int new_array[] = new int[len*2];
 // 把原来array数组中的数据依次copy到new_array
 for (int j = 0; j < len; ++j) {
 new_array[j] = array[j];
 }
 // new_array复制给array,array现在大小就是2倍len了
 array = new_array;
 len = 2 * len;
 }
 // 将element放到下标为i的位置,下标i加一
 array[i] = element;
 ++i;
}
  • 最好时间复杂度,当i<length时, O(1)
  • 最差时间复杂度,当i>=length时,O(n)

第一种计算方式: (1+1+…+1+n)/(n+1) = 2n/(n+1) 【注: 式子中1+1+…+1中有n个1】,所以平均复杂度为O(1);

第二种计算方式(加权平均法,又称期望): 1*(1/n+1)+1*(1/n+1)+…+1*(1/n+1)+n*(1/(n+1))=1,所以加权平均时间复杂度为O(1);

第三种计算方式(均摊时间复杂度): 前n个操作复杂度都是O(1),第n+1次操作的复杂度是O(n),所以把最后一次的复杂度分摊到前n次上,那么均摊下来每次
操作的复杂度为O(1)

展开阅读全文
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值