评价算法的两个重要依据——时间复杂度和空间复杂度
时间复杂度
T(n)=常数 ——> O(1)
T(n)=多项式 例如:3n^2 + 5n + 3 ——>O(n) 只保留有n项并去除系数
T(n)=5n^3+666n^2+3333 ——>O(n^3) 保留最高幂数项并去掉系数
如果有a重循环,时间复杂度:O(n^a)
例题:
空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度
常见的空间复杂度有 O(1)、O(n) 和 O(n^2)
例子:
function traverse(arr) {
var len = arr.length
for(var i=0;i<len;i++) {
console.log(arr[i])
}
}
虽然里面是一个循环但这只是对时间上的影响,占用空间的有以下变量:arr;len;i ,循环体执行也不会开辟新空间,所以这个函数对内存的占用量是恒定的,他的空间复杂度就是:O(1)
另一个例子:
function init(n) {
var arr = []
for(var i=0;i<n;i++) {
arr[i] = i
}
return arr
}
在这个函数中,占用内存的变量有:arr;n;i , 注意一点,这里的arr不是一成不变的数组,他会随着 n 的增大而增大、呈一个线性关系,所以,他的空间复杂度就是:O(n)
假如需要初始化的是一个规模为 n*n 的数组,那么它的空间复杂度就是 O(n^2)
这里这对时间复杂度和空间复杂度做简单认识学习,还得多做题巩固加深!!!