常数的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。
时间复杂度:常数操作量的指标(常用O来表示)
具体来说,在常数操作数量的表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分如果记为f(n),则时间复杂度为O(f(n));
eg1:若时间复杂度为aN^2+N+1
则时间复杂度为O(N^2)
eg2:二分法的时间复杂度为O(log2N)
注:一次砍一半能砍log2N次
eg3:如果时间复杂度分别为O(N^2)和O(N),则选O(N)(先看幂次,选幂次小的,再看系数,选系数小的)
eg4:一个有序数组A,另一个无序数组B,请打印B中所有不在A中的数(A数组长度为N,B数组长度为M)
①对于数组B中的每个数都在数组A中通过遍历的方式找
则时间复杂度为O(N*M)
②对于B中每个数都在A中通过二分的方式找
则时间复杂度为O(M*log2N)
③先把B排序,然后用类似外排的方式打印出所有在A中出现的数
则时间复杂度为O(M*log2M)+O(N+M) (M*log3M为排序时间最短的算法)
注:由N和M实际大小才能确定2和3哪个更好
如果A数组很短,B数组很长则算法2更好
外排: