时间复杂度
常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成操作,叫做常数操作。如:数组寻址操作(在计算机里内存跳一下)、加减乘除操作、位运算操作。
时间复杂度为一个算法流程中,常熟操作数量的指标。常用0(读作big 0)来表示。具体来说,在常数操作数量的表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分如果记为f(N),那么时间复杂度为O(f(N))。
评价一个算法流程的好坏,先看时间复杂度的指标,然后再分 析不同数据样本下的实际运行时间,也就是常数项时间。
一个语句的频度是指该语句在算法中被重复执行的次数,算法中所有语句的频度之和记为T(n),他是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。
算法中的基本运算(最深层循环内的语句)的频度与T(n)同数量级,所以通常采用算法中基本运算的频度f(n)来分析算法的时间复杂度。记为T(n)=O(f(n))
例一:一个简单的理解时间复杂度的例子一个有序数组A,另一个无序数组B,请打印B中的所有不在A中的数,A数组长度为N,B数组长度为M。三个流程,三种时间复杂度的表达...算法流程1:对于数组B中的每一个数,都在A中通过遍历的方式找一下;O(M*N)算法流程2:对于数组B中的每一个数,都在A中通过二分的方式找一下;O(M*logN)算法流程3:先把数组B排序,然后用类似外排的方式打印所有在A中出现的数;第一步排序:O(M*logM)第二步外排:O(N+M)
空间复杂度