zoukankan      html  css  js  c++  java
  • 时间复杂度和空间复杂度

    时间复杂度

    常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3), k次方阶O(nk),指数阶O(2n),随着问题规模不断扩大,上述时间复杂度不断地增大,算法执行效率越来越低。

    一、常数阶(O(1))

    <?php
    	//从上到下所有的代码执行一次
    	$a = 123;
    	$b = 456;
    	$c = $a + $b;
    	echo $c;

    二、对数阶(O(log2n))

    <?php
    	$num = 1;
    	while($num < n){
    		$num = $num * 2;
    		//在while循环里面是顺序的执行(时间复杂度为O(1))
    	}

    三、线性阶(O(n))

    <?php
    	for($i = 0; $i < 9; $i++){
    		//顺序执行。时间复杂度为O(1)
    	}

    四、平方阶(O(n2))

    <?php
    	for($i = 0; $i < 9; $i++){
    		for($j = 0; $j < 9; $j++){
    			//时间复杂度O(1)
    		}
    	}

    五、立方阶(O(n3))

    <?php
    	for($i = 0; $i < 9; $i++){
    		for($j = 0; $j < 9; $j++){
    			for($j = 0; $j < 9; $j++){
    			//时间复杂度O(1)
    			}
    		}
    	}

    空间复杂度

    一、递归情况

    function binSearch($arr, $key, $start, $end)
    { 
        $mid = ceil(($start+$end) / 2); 
        if($arr[$mid] < $key){ 
            binSearch($arr, $key, $mid+1, $end);
        }else if($arr[$mid] > $key){ 
            binSearch($arr, $key, $start, $mid-1);
        }else{ 
            return $mid; 
        } 
    }
    

    注意:

    1、递归情况下的空间复杂度:如果每次递归的辅助空间为常数,则空间复杂度为O(N)。

    2、递归的二分查找的空间复杂度:递归深度是log2^n,每次递归的辅助空间为常数,所以空间复杂度为O(log2n)。

    二、迭代情况

    function binSearch($arr, $key){ 
        $start=0; 
        $end=count($arr)-1; 
        while($start <= $end){ 
            $mid = ceil(($start+$end)/2); 
            if($arr[$mid] < $key){ 
                $start = $mid+1; 
            }else if($arr[$mid] > $key){ 
                $end = $mid-1; 
            }else{ 
                return $mid; 
            } 
        } 
    }
    

    在这个过程中,辅助空间为常数级别,所以空间复杂度为O(1)(有一个辅助变量$mid)

    总结

    时间复杂度:

    1、用常数1来取代所有时间的所有加法常数,比如这个程序被执行了三次应该是O(3),3是常数直接用1取代为O(1);

    2、在修改后的运行次数中,只保留最高阶项,比如O(n^2+3n+3),最后的时间复杂度是O(n^2),2是常数直接用1替代;

    3、如果最高阶项不存在1的常数,则去除最高阶项的常数,比如O(2n^2+1),最后的时间复杂度是O(n^2)。

    空间复杂度:

    1、包括程序代码所占用的空间、输入数据所占用的空间、辅助变量所占用的空间。

  • 相关阅读:
    pom 打包空目录
    pom添加多个源代码目录
    pom文件中的内置变量
    POM文件中的标签及说明
    maven 中的内置变量
    maven 的几个重要的配置文件:super pom & 生命周期默认绑定的配置文件
    maven 默认的阶段绑定周期(Plugin Bindings for default Lifecycle Reference)
    maven 生命周期参考(Lifecycles Reference)
    maven编译项目
    cygwin 中文乱码
  • 原文地址:https://www.cnblogs.com/meichao/p/9227654.html
Copyright © 2011-2022 走看看