了解时间复杂度分析

以例子来说 更好的理解
先了解一下大O表示法

 int cal(int n) {
   int sum = 0;
   int i = 1;
   for (; i <= n; ++i) {
     sum = sum + i;
   }
   return sum;
 }

读数据-运算-写数据。尽管每行代码对应的 CPU 执行的个数、执行的时间都不一样,但是,我们这里只是粗略估计,所以可以假设每行代码执行的时间都一样。所以上述为(2+2n)*time
2是因为2行3行,2n是因为for循环n次 里面执行一次外面执行一次

再看下一个

int cal(int n) {
   int sum = 0;
   int i = 1;
   int j = 1;
   for (; i <= n; ++i) {
     j = 1;
     for (; j <= n; ++j) {
       sum = sum +  i * j;
     }
   }
 }

计算下来为(3+2n+2n^2)*time
规律:所有代码的执行时间 T(n) 与每行代码的执行次数 n 成正比

时间复杂度分析

1.只关注循环次数最多的一段代码

我们在分析一个算法、一段代码的时间复杂度的时候,也只关注循环执行次数最多的那一段代码就可以了。
所以刚才第一个例子用大O表示法九尾O(n)

2.加法法则:总复杂度等于量级最大的那段代码的复杂度

可以分析一下下述的代码

int cal(int n) {
   int sum_1 = 0;
   int p = 1;
   for (; p < 100; ++p) {
     sum_1 = sum_1 + p;
   }

   int sum_2 = 0;
   int q = 1;
   for (; q < n; ++q) {
     sum_2 = sum_2 + q;
   }
 
   int sum_3 = 0;
   int i = 1;
   int j = 1;
   for (; i <= n; ++i) {
     j = 1; 
     for (; j <= n; ++j) {
       sum_3 = sum_3 +  i * j;
     }
   }
 
   return sum_1 + sum_2 + sum_3;
 }

第一段和第二段为O(n)第三段为O(n^2)
总的时间复杂度就等于量级最大的那段代码的时间复杂度
所以时间复杂度为O(n^2)

3.乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积看一个例子

int cal(int n) {
   int ret = 0; 
   int i = 1;
   for (; i < n; ++i) {
     ret = ret + f(i);
   } 
 } 
 
 int f(int n) {
  int sum = 0;
  int i = 1;
  for (; i < n; ++i) {
    sum = sum + i;
  } 
  return sum;
 }

第一端的复杂度为O(n)第二段的为O(n)
嵌套 所以整体的复杂度为O(n^2)

理解上述的之后,了解一下多项式时间复杂度
1.O(1)
只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,其时间复杂度也是Ο(1)。
2.O(logn)、O(nlogn)
下述例子,每次循环都是2的次方,时间复杂度为O(log以2为底的n)

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

**3. 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;
}

m*n即为 两个未知,一个嵌套另一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值