简单算法复杂度
这是任何AI工程师必须深入理解的概念,对于每一个设计出来的算法都需要从两个方面来分析算法复杂度:时间复杂度和空间复杂度。时间复杂度是说算法运行时间,空间复杂度是占据的存储空间。一般我们使用 o notation来表示,比如O(N),O(N^2)。
简单复杂度
我们看上面代码,它的时间复杂度是有一个0到N的循环,有N*1的操作=O(N)。下面的例子有N/2*1个操作,所以时间复杂度为1/2*O(N)=O(N)。总体来讲时间复杂度是O(N)。
空间复杂度需要看代码用到了多少的内存空间,上面的代码中唯一用到的是a,b,赋值int类型内存空间。可以理解为2个单位的内存空 间,这种复杂度我们称为O(1),我们称为constant space complexity。是一个常数复杂度,不依赖N赋值变化。N是100还是10,我们都需要两个单位内存空间。
我们继续看上面代码,这个有两个for循环,首先时间复杂度上,我们分析总共需要多少操作:
空间复杂度上面和前面类似,我们这个代码只用到了a,i,j的变量部分,三个单位的内存单元,而且与N无关,所以其空间复杂度也是O(1)。
这段代码,当i=20时候,总共操作为2*6个,也是2 * log (N) = 2 * O (log N) = O(log N)。所以时间复杂度是O(log N)。空间复杂度是O(1),同理下面的时间复杂度是O(n*log n)
我们经常说算法X效率高于Y的时候,一般是说时间复杂度,时间复杂度大小比较:
但是实际效率上,效率是不一定的,因为复杂度概念是理想情况下,假设N足够大的时候,一般可以保证复杂度和实际效率的关系。