算法复杂度
算法的复杂性体现在运行该算法时计算机所需资源的多少,计算机资源最重要的是时间和空间,故算法复杂度分为时间复杂度和空间复杂度。
一、时间复杂度
一个算法中的语句执行次数称为语句频度或时间频度,记为T(n),也叫常数操作数量表达式。
- 常数操作:与数据量无关的操作,如 + - * / 位操作 比较操作等,每次操作具有固定的时间
时间复杂度是指在最差的情况下执行算法所需要的计算工作量,其表示方式为O(f(N)),读作bigO。
时间复杂度的f(N)与常数操作的表达式T(n)有关,具体为常数操作数量表达式忽略系数的最高阶项,如常数操作数量表达式为 2 * N^2 + 1,则时间复杂度O(N2),类似于高阶无穷大。
对于一个算法来说,若其执行次数与输入的大小无关,则算法复杂度为O(1),如访问数组中的单个元素;
对于不同算法,时间复杂度同为O(f(N))时,比较常数操作数量表达式T(n)的常数项来区分好坏,但通常指标不容易判断,直接跑代码看谁快。
递归行为时间复杂度
当递归行为满足子问题等规模时,可用master公式来判断其时间复杂度。
T(N) = a * T(N/b) + O(Nd)
T(N) :母问题数据量
a :子问题执行次数
T(N/b):子过程,1/b为子问题数据量相对母问题数据量的占比
O(Nd):剩余过程的时间复杂度
根据master公式,时间复杂度判断有以下三种情况
logb a < d O(Nd)
logb a > d O(Nlogba)
logb a = d O(Nd * logN) log默认以2为底
如二分法查找最值问题,每次将母问题分成两份,则a = 2,b = 2,d = 0,其时间复杂度为O(logN)
二、空间复杂度
空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。如插入排序的空间复杂度为O(1),因为在执行
算法的过程中没有额外使用存储空间。

浙公网安备 33010602011771号