算法时间复杂度

三个循环:

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去掉,换成一个二分查找,加一个中间数组

就可以实现