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、包括程序代码所占用的空间、输入数据所占用的空间、辅助变量所占用的空间。

  • 相关阅读:
    iOS与H5交互时,去掉调用方法时产生的警告
    技术支持网址:Technical support
    iPhone X 适配
    iOS11 上拉刷新后没有动画出现,直接瞬间出来没有停顿
    要不要去柬埔寨工作,很纠结,但是工资我又无法拒绝
    iOS10 CAAnimationDelegate的适配
    Swift3GCD
    Alamofire4.0 在 CocoaPods无法更新的问题
    8行代码全屏滑动
    bootstrap table 前端分页的问题
  • 原文地址:https://www.cnblogs.com/meichao/p/9227654.html
Copyright © 2011-2022 走看看