时间复杂度
常见的时间复杂度有EZ娱乐源码出售请添加链接描述(www.1159880099.com) QQ1159880099:常数阶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、包括程序代码所占用的空间、输入数据所占用的空间、辅助变量所占用的空间。
原文地址:http://blog.51cto.com/13835236/2132708