算法的复杂度:

算法的复杂度:

我们一般用两个维度形容一个算法的资源消耗,以此来判断我们的算法是否优良,它们就是“时间复杂度”与“空间复杂度”

时间复杂度:

时间复杂度:指执行算法需要的计算工作量。
每个算法的语句执行次数与时间成正比,执行次数越多,花费的时间也就越多,这个语句执行次数我们称之为语句频度或时间频度,记为T(n)。n为问题的规模,当n不断变化时,时间频度T(n)也会变化,若有某个辅助函数f(n),存在一个正常数c,使f(n)*c>=T(n)恒成立,记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度,简称时间复杂度。意味着O(f(n))为执行这个算法所消耗时间的最大值。
在各种不同算法中,若算法中执行语句执行次数为一个常数,则时间复杂度为O(1)。另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n^2+3n+4 与 T(n)=4n^2+2n+1它们的频度不同,但时间复杂度相同,都为O(n^2),因为时间复杂度代表了资源消耗与n递增时的关系,相比n^2,在n越来越大时,n或k*n对T(n)的影响就非常小了。
按数量级递增排列,常见的时间复杂度有:

  • 常数级O(1)
  • 对数级O(log2n)(以2为底n的对数)
  • 线性级O(n)
  • 线性对数级O(n*log2n)
  • 平方级O(n^2)或k方级O(n^k)
  • 指数级O(2^n)或O(k^n)

    常见算法时间复杂度:哈希O(1),数组遍历O(n),归并排序O(nlogn),冒泡排序、选择排序O(n^2),背包算法O(2^n)

空间复杂度:

空间复杂度: 指算法在计算机内执行时所需存储空间的度量,记作S(n)=O(f(n))。
算法执行期间所需要的存储空间分为3个部分:

  • 算法程序所占的空间
  • 输入的初始数数据所占的存储空间
  • 算法执行过程中所需要的额外空间

猜你喜欢

转载自blog.csdn.net/u011305680/article/details/80280252