时间复杂度
算法的执行时间受到设备、环境等影响,不易评估和比较。
使用语句的执行次数来判断,哪个算法中语句执行次数多,它花费时间就多!
1、常数阶O(1)
没有循环
let i = 1;
let j = 2;
++i;
j++;
let m = i + j;
2、线性阶O(n)
有一层循环!
for循环里面的代码会执行n遍,因此它消耗的时间是随着n的变化而变化的
for (let i = 0; i < n; i++) {
i++;
}
3、对数阶O(logN)
循环里面有判断条件,使得语句执行次数需要开放
for (let i = 0; i < n; i++) {
i = i * 2;
}
4、线性对数阶O(nlogN)
将时间复杂度为O(logn)的代码循环N遍的话,那么它的时间复杂度就是 n * O(logN),也就是了O(nlogN)。
for (m = 1; m < n; m++) {
for (i = 0; i < n; i++) {
i = i * 2;
}
}
5、平方阶O(n²)
for (x = 1; i <= n; x++) {
for (i = 1; i <= n; i++) {
j = i;
j++;
}
}
空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度,
1、O(1)
如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1)
let i = 1;
let j = 2;
++i;
j++;
let m = i + j;
2、O(n)
ew了一个数组出来,这个数据占用的大小为n,这段代码的2-6行,虽然有循环,但没有再分配新的空间,因此,这段代码的空间复杂度主要看第一行即可,即 S(n) = O(n)
let m = new Array(n)