时间复杂度和空间复杂度分析

一 定义

衡量一个算法的性能,除了能实现需求之外。进阶就是考虑在算法运行过程中时间和资源的消耗。

因此,

  时间复杂度:执行当前算法所消耗的时间; 

  空间复杂度:执行当前算法所需要占用的内存空间

 

二 计算

1 时间复杂度(使用O符号表示法,表示代码执行时间的增长变化趋势)

  T(n)=O(f(n))   // f(n)表示每行代码执行次数之和,O表示正比例关系

2 空间复杂度 S(n)

 

三 常用的复杂度量级

1 时间复杂度(从上往下复杂性增加)

 

  • 常数阶O(1):消耗的时间并不随某个变量n变化而变化

  • 对数阶O(logN):当数据增大n倍,耗时增大logn倍(以2为底)。如二分查找

  • 线性阶O(n):如n决定的for循环,消耗的时间随着n的变化而变化

  • 线性对数阶O(nlogN):将时间复杂度为O(logN)的代码循环N遍,如归并排序

  • 平方阶O(n²):把 O(n) 的代码再嵌套循环一遍

  • 立方阶O(n³):3层N循环

  • K次方阶O(n^k):k层N循环

  • 指数阶(2^n)

 

2 时间复杂度

 

  • O(1):所需要的临时空间并不随某个变量n变化而变化

  • O(n):如new了一个大小为n的数组,int[] m = new int[n];

  • O(n^2)

 

posted @ 2019-11-05 17:32  闲不住的小李  阅读(333)  评论(0编辑  收藏  举报