时间复杂度
时间复杂度是一个函数,它定性描述该算法的运行时间。
时间复杂度是用来估计程序的运行时间的,描述算法大概运行时间的趋势。
假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示,随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称作为算法的渐近时间复杂度,简称时间复杂度,记为 )。
时间复杂度用O表示。
时间复杂度:1> log2n >n >nlog2n >n^2
O(1)
每次执行程序时,每行代码只会被执行一次。
let i=0;
i+=1;
O(n)
循环n次,for循环中的代码会被执行n次
for(let i=0;i<n;i+=1){
console.log(i)
}
O(1)+O(n)=O(n)
代码先后排列,时间复杂度相加,则整体的时间复杂度为较大的时间复杂度(忽略增长趋势较小的时间复杂度)
let i=0;
i+=1;
for(let i=0;i<n;i+=1){
console.log(i)
}
O(n)*O(n)=O(n^2)
代码嵌套,时间复杂度相乘,将括号中的值相乘
for(let i=0;i<n;i+=1){
for(let i=0;i<n;i+=1){
console.log(i)
}
}
O(logN)
while中的代码循环了logN次(2的多少次方大于或等于N)
let i=1;
while(i<n){
console.log(i);
i*=2;
}
空间复杂度
空间复杂度是程序运城过程中临时占用的存储空间大小的量度。
O(1)
只声明了单个变量,单个变量占用的内存为1
let i=0;
i+=1;
O(n)
循环使变量i的值发生变化,为数组中添加了n个不同的变量值,占用了n个内存单元。
const list=[];
for(let i=0;i<n;i+=1){
list.push(i);
}
O(n^2)
该代码结果为一个矩阵,本质为一个二维数组,存储了n^2个变量值,占用n^2个内存空间。
const matrix=[];
for(let i=0;i<n;i+=1){
matrix.push([]);
for(let j=0;j<n;j+=1){
matrix[i].push(j);
}
}