一、时间复杂度
1、常数阶: 执行恒定时间的算法,O(1)。
2、线性阶:
<?php
for ($i=0; $i < n; $i++) {
# 到这里执行一次为 O(1);
}
?>
循环 n 次,O(n)。
3、对数阶:
<?php
$i = 1;
while ($i <= n) {
//时间复杂度 O(1),
//而每次i*2之后离结束更近一分。
//也就是 2^x = n,
//循环的时间复杂度为 log2(n)。
$i = $i * 2;
}
?>
4、平方阶:
<?php
for ($i=0; $i < n; $i++) {
for ($j=0; $j < n; $j++) {
// ① 所以就是 O(n * n)。
// ② 但当外循环和内循环的n值不一样是就会变成 O(m*n),
// ③ 又如果内层循环是j=i开始,
// 它的时间复杂度就是n+(n-1)+(n-2)+...+1
// =[n(n+1)]/2 = n^2/2 + n/2
// O(n^2)
# 每次执行到这儿是 O(1);
}
}
?>
TO SUMMERISE ,
即: 常数阶 < 对数阶 < 线性阶 < 平方阶。
二、空间的复杂度
一般会牺牲空间上的开销来换取时间。
算法的空间复杂度通过计算算法所需的存储空间来实现。
一般情况下,一个程序在机器上执行,除了需要储存程序本身的指令、常数、变量和输入数据外,还需要存储对数据操作的存储单元。
而如果输入数据所占空间只取决于问题本身,和算法无关,这样只需要分析该算法在实现是所需的辅助单元即可。
若算法执行师所需的辅助空间相对于输入数据量而言是常数,则称此算法为原地工作,空间复杂度为 O(1)。
P.S. 最近心不静,浮躁的要飞起来,理应勿忘初心,才会心想事成。INNER PEACE , NEVER FORGET WHERE YOU SET OFF.