算法复杂度
2021-06-16 本文已影响0人
测试账号
在IT的世界,有两个特殊的单位,一个叫时间复杂度,另一个空间复杂度,这两个单位是对算法设计好坏的衡量标准。即都是越小越好。
空间复杂度
空间复杂度一般是比较好掌握,就是你申请的内存大小决定了你的空间复杂度,如果内存固定,那空间复杂度就是O(1),如果直接申请n块内存,空间复杂度就是O(n)
时间复杂度
时间复杂度一般是根据具体需求来进行算法实现的,所以比较多样性一点,同时也存在着很大的优化空间。常见的时间复杂度一般有以下几种:
常数阶O(1)
当算法中不涉及变量n,仅有常数就可以完成的,一般时间复杂度为O(1);
线性阶O(n)
当算法中出现了循环执行的函数,且循环次数仅为n次,算法中也未出现递增数的乘法,这时候时间复杂度为O(n);
对数阶O(logN)
当算法中出现循环执行的函数,且循环次数为n次,算法中也出现了递增数和常数的阶乘,这时候时间复杂度为O(logN);
线性对数阶O(nlogN)
当算法中出现了循环函数的嵌套,且外函数循环次数为n次,内循环为对数阶循环的时候,这时候时间复杂度为O(nlogN);
平方阶O(n²)
当算法中出现了嵌套循环函数,而且内外循环次数都是n的时候,这时候时间复杂度为O(n²)
立方阶O(n³)、K次方阶O(n^k)、指数阶(2^n)
参考上面的O(n²) 去理解就好了,O(n³)相当于三层n循环,其它的类似。
常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(logn)<Ο(n)<Ο(nlogn)<O(n²)<O(n³)<…<Ο(2^n)<Ο(n!)