算法复杂度(时间与空间)

一、时间复杂度

1、含义:

	时间复杂度代表一个算法的执行效率时间随数据规模增长的变化趋势。

2、计算公式:

	时间复杂度与代码的执行次数成正比。
	写法:T(n)  =  O(f(n))    其中f(n)代表代码的执行次数总和。

3、计算法则:本质上是计算代码执行次数

  1. 常数项省略:其对增长趋势没有影响。
  2. 只需要计算循环执行最多的一段代码。
  3. 函数想加,等于量级最大的那一段循环代码执行次数。
  4. 嵌套循环,等于内外循环次数的乘积。

4、常见时间复杂度

  1. 多项式量级:
    Alt
  2. 非多项式量级:指数阶于阶乘阶。即NP问题,其算法非常低效,不采纳。

特别说明:O(m+n)于O(m*n):执行了两个不同数量级的循环,所以不能混为一体。如下代码其复杂度为O(m+n):


int cal(int m, int n) {
  int sum_1 = 0;
  int i = 1;
  for (; i < m; ++i) {
    sum_1 = sum_1 + i;
  }

  int sum_2 = 0;
  int j = 1;
  for (; j < n; ++j) {
    sum_2 = sum_2 + j;
  }

  return sum_1 + sum_2;
}

二、空间复杂度

1、含义:

	算法的存储空间与数据规模之间的增长关系。

三、补充:

1、常见时间复杂度函数图:

复杂度函数图

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

下述代码为查找某个数x在数组中的位置,由于原数组array中x位置的不确定,导致循环的次数也不一样。
所以引出了最好(x在数组开头)、最坏(x在数组最后或不在数组内)、平均(求平均次数)情况时间复杂度。
只有同一代码块存在量级的差距时才会进行区分求时间复杂度,一般用不到。


// 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值