算法篇-----时间复杂度的概念

评价一个算法的好与坏,我们往往需要了解到时间复杂度这样一个基础概念,之前对其并不看重,最近发现要经常用到,故写下此篇,便于你我的理解。

1.常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。例如,数的加加减减,根据数组的下标索引取值等等 称为big O(1)

2.时间复杂度为一个算法流程中,常数操作数量的指标。常用O(读作big O)来表示。具体来说,在常数操作数量的表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分如果记为f(N),那么时间复杂度为O(f(N)).
理解一波:
例子1:有一个有序数组A,和一个无序数组B,其长度分别为M,N,请找出数组B中有但数组A中没有的数。
采取方案,遍历数组B的每一个元素,判断它是否在数组A中,所以其次数为M*N,所以记作O(M*N)
例子2:有一个无序数组,长度为N,让你来排序。
采取方案:第一遍找到最小的输放在第一个位置,接着往后循环该过程,也就是说:N + N-1+N-2+…+2+1,这个计算到的结果其实是An^2 +Bn+C的形式,根据上面的口诀,只要高阶项,不要低阶项,不要高阶项的系数,所以记作O(n^2) .
例子3:题目跟例子1一样,不过想要用另一个方案:对于数组B中的每一个数,都在A中通过二分的方式查找一下。
注意二分查找(必须是有序的),它的复杂度是O(logN),表示的是以2为底。记作O(logN),总的为O(M*logN)

算法篇-----时间复杂度的概念

综上所述,评价一个算法的好坏,先看复杂度的指标,O(n^2)和O(n),再比较常数项的执行时间,其实就是系数的大小啦!