算法复杂度

时间复杂度

一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。

存在不确定n,在if、while、do-while、foreach等这样循环内,有多层嵌套时时间复杂度就越高。

for($i = 1; $i<=$n; $i++){
    for($j = 0; $j<$i; $j++){
        print($i.'_'.$j);
    }
}

这个的时间复杂度为T(n) = O(n^2)

那是怎么得来的呢?

1 + 2 + 3 + 4 + 5 + ... + n = (n^2 + n)/2

由于时间复杂度不考虑系数,所以近似于n^2

$x=91; $y=100;
while($y > 0){
    if ($x > 100){
        $x -= 10;
        $y--;
    } else {
        $x++;
    }
}

上面的时间复杂度是T(n) = O(1),是常阶函数

因为都是确定值

算法的时间复杂度不仅仅依赖于问题的规模,还与输入实例的初始状态有关

在数值A[0..n-1]中查找给定值K的算法大致如下:

$i = $n - 1;
$k = 8;
while($i >= 0 && $A[$i] != $k){
    $i--;
}

此算法中的频度不仅与问题规模n有关,还与输入实例中A的各元素取值及K的取值有关: ①若A中没有与K相等的元素,则算法的频度f(n)=n; ②若A的最后一个元素等于K,则算法的频度f(n)是常数0。

有两个算法A1和A2求解同一问题,时间复杂度分别是T1(n)=100n2,T2(n)=5n3。(1)当输入量n<20时,有T1(n)>T2(n),后者花费的时间较少。(2)随着问题规模n的增大,两个算法的时间开销之比5n^3 / 100n^2=n/20亦随着增大。即当问题规模较大时,算法A1比算法A2要有效地多。它们的渐近时间复杂度O(n2)和O(n3)从宏观上评价了这两个算法在时间方面的质量。在算法分析时,往往对算法的时间复杂度和渐近时间复杂度不予区分,而经常是将渐近时间复杂度T(n)=O(f(n))简称为时间复杂度,其中的f(n)一般是算法中频度最大的语句频度

空间复杂度

空间复杂度是指算法在计算机内执行时所需存储空间的度量。记作:

S(n)=O(f(n))

算法执行期间所需要的存储空间包括3个部分:

1、算法程序所占的空间;

2、输入的初始数据所占的存储空间;

3、算法执行过程中所需要的额外空间。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 时间复杂度 时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没...
    小慕先森阅读 461评论 0 0
  • 算法复杂度 时间复杂度 空间复杂度 什么是时间复杂度 算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗...
    KODIE阅读 3,345评论 0 9
  • 时间复杂度 一个算法花费的时间,与算法中语句的执行次数成正比例。哪个算法中语句执行次数多,它花费时间就多。我们把一...
    几千里也阅读 612评论 0 1
  • 通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关...
    西域小码阅读 1,921评论 0 11
  • 收集一些文章而已。 本文转自 http://blog.csdn.net/typhoonzb/article/det...
    暮雨沉沦阅读 550评论 0 5