码迷,mamicode.com
首页 > 其他好文 > 详细

复杂度

时间:2020-11-04 17:52:30      阅读:16      评论:0      收藏:0      [点我收藏+]

标签:def   复杂度   占用内存大小   占用   -o   nbsp   ++   loaded   执行   

  • 算法的优劣取决于两点 1:执行时间 2:占用内存大小

一:时间复杂度

  • 时间复杂度,说的不是算法执行的时间,而是算法执行的次数

1:常数阶

  • T(n) =O(1)

 method(){
  int i=1;
  int j=1;
  i++;
  j++;
    .....
  i++
  j++;
 }
 上述方法,从上到下只执行一次,可以这么表示时间复杂度 T(n) =O(1)

2: 线性阶

  • T(n) =O(n)

 for(i=0;i++;i<n){
     j=i;
     j++;
 }
 上述循环,执行次数取决于n的大小,可以这么表示时间复杂度T(n) =O(n)

3: 对数阶

  • T(n) =O(log2n)

 int i=1;
 while(i<n){
     i=i*2;
 }
 上述while循环,执行次数,取决于n,但是明显不是执行了n次,执行次数是,log2n,
 假如n=16,循环次数是4次,这种情况的时间复杂度可以这么表示 T(n) =O(log2n)

4: 线性对数阶

  • T(n) =O(nlog2n)

 for(i=1;i<n;i++){
     while(j<n){
         j=j*2
    }
 }
 while循环里面执行,次数是log2n次,for循环执行n次,总次数是nlog2n
 时间复杂度可以这么表示 T(n) =O(nlogN)

5: 平方阶

T(n) =O(n*n)

 for(i=1;i<n;i++){
     for(i=1;i<n;i++){
    j=i;
    }
 }
 上述执行次数是,n*n
 时间复杂度可以这么表示 T(n) =O(n2)
 或者T(n) =O(n*n)

6:立方阶O(n3)

7:K次方阶O(n^k)

 

二:空间复杂度

  • 占用的内存空间的大小

1: 空间复杂度 O(1)

 int i=1;
 int j=1;
 i++;
 j++;
 m= i+j;
 ?
 i,j,m的内存不会随数据变化而变化
 故空间复杂度可以表示为
 S(n)=O(1)

2: 空间复杂度 O(n)

 int[] m=new int[n]
 for(i=1;i<n;i++){
     j=j*2
 }
 ?
 分配的内存空间的大小是 m数据决定的
 故时间复杂度可以表示为
 S(n) = O(n)

3: 空间复杂度 O(n2)

 for(i=1;i<n;i++){
     new int[n]
 }
 根据n的大小,决定创建数组的次数,
 故时间复杂度可以这么表示
 S(n) =O( n*n)

 

复杂度

标签:def   复杂度   占用内存大小   占用   -o   nbsp   ++   loaded   执行   

原文地址:https://www.cnblogs.com/chtlx/p/13920347.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!