算法的时间复杂度与空间复杂度

常见的时间复杂度量级有:

  • 常数阶O(1)
  • 对数阶O(logN)
  • 线性阶O(n)
  • 线性对数阶O(nlogN)
  • 平方阶O(n²)
  • 立方阶O(n³)
  • K次方阶O(n^k)
  • 指数阶(2^n)

上面从上至下依次的时间复杂度越来越大,执行的效率越来越低。

 

1.常数阶O(1)

int i = 1;
int j = 2;
++i;
j++;
int m = i + j;

消耗的时候并不随着某个变量的增长而增长

 

2.线性阶O(n)

for(i=1; i<=n; ++i)
{
   j = i;
   j++;
}

消耗的时间是随着n的变化而变化的

 

3.对数阶O(logN)

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

2 的 x 次方等于 n,那么 x = log2^n

 

4.线性对数阶O(nlogN)

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

 

5.平方阶O(n²)

for(x=1; i<=n; x++)
{
   for(i=1; i<=n; i++)
    {
       j = i;
       j++;
    }
}

 

空间复杂度比较常用的有:O(1)、O(n)、O(n²)

 

1.空间复杂度 O(1) 

int i = 1;
int j = 2;
++i;
j++;
int m = i + j;

代码中的 i、j、m 所分配的空间都不随着处理数据量变化

 

2.空间复杂度 O(n)

int[] m = new int[n]
for(i=1; i<=n; ++i)
{
   j = i;
   j++;
}

 第一行new了一个数组出来,这个数据占用的大小为n,这段代码的2-6行,虽然有循环,但没有再分配新的空间

 

posted @ 2021-02-05 16:49  Redchar  阅读(186)  评论(0编辑  收藏  举报