算法时间复杂度
三个循环:
for x in ...
for y in ...
for z in ..
时间复杂度O(N^3)
对于二循环:
for 0..n
for 0..m
在运算过程成,需要的步数是N*M,那么称呼它的复杂度是O(N^2),
N衡量的是你的算法,步数上升的一个量级
如果是一个for 0..n的算法,那么时间复杂度是O(N)
如果是:x = 10,这样一行完成的代码,它的复杂度是O(1)
也许你的O(N)的算法,会比O(N^2)的算法所花的时间长,因为你那个O(N)的算法,可能需要处理100万个数据
而你那个O(N^2)的算法可能只需要处理100个数据,那么100*100 = 10000,还是比一百万数据的处理时间少
但是衡量算法性能好坏不看那个绝对时间,看这个大O,因为你的复杂度是O(N^2)的话,它随着数据量的增大,它的时间上升特别快
O(N)则是线性上升,当然,大O的复杂度如果是指数或者是阶乘,那就是复杂度很高,效率很低的算法,那就是复杂度很高,效率很低的算法
二分查找法,时间就是O(ln),因为每次都是除以2,所需步数的量级就是lnN
所以上面这个算法的复杂度是O(N^2)
我们可以把它降到O(N*lnN)
如果把其中一个for去掉,换成一个二分查找,加一个中间数组
就可以实现