复杂度分析总结

复杂度的总结概要

最近复习算法,先总结一下最基本的时间复杂度概念和判断方法。

常用七种

在这里插入图片描述

不考虑常数系数。

判断: 代码根据n的情况运行的次数
O(1)
var n = 1000;
console.log('输出一次:'+ n )
console.log('输出二次:'+ n )
console.log('输出三次:'+ n )

不关心常数系数,无论输出多少次,复杂度都是O(1)

O(n)
var n = 5;
for (var i = 1; i <= n ; i++){
	console.log('第一次循环输出:' + i)
}

随着n的变化执行次数与n成线性关系

另外,两次for循环是并列执行,时间复杂度还是O(n)

O(n^2)
var n = 5;
for (var i = 1; i <= n ; i++){
	for (var j = 1; j <= n ; j++){
		console.log('第一次循环输出:' + i + '第二次循环输出:' + j )
	}
}

二次循环嵌套时间复杂度变为O(n^2)

O(log(n))
var n = 4;
for (var i = 1; i <= n ; i=i*2){
	console.log('我的输出:' + i)
}

如果n为4,i 执行2次 ,函数体执行次数为 log2(n),所以其时间复杂度为O(log(n))

O(k^n)
var fib=function(n){
	if(n<2){
		return n;
	}
	else{
		return fib(n-1)+fib(n-2);
	}
}
console.log(fib(5));

递归求斐波那契数列,指数级的时间复杂度;画树求解。

在这里插入图片描述

递归函数的时间复杂度计算原理: 主定理;

常见四种算法的时间复杂度:
(有序数组)二分查找:O(log(n))
二叉树遍历: O(n) 每次一分为二,每边以相等的时间复杂度计算, 每个节点只访问一次
有序矩阵)二分查找:O(n)
归并排序(所有排序中最优的时间复杂度):O(nlogn)

降低时间、空间复杂度,节约计算机资源

例:计算: 1+2+3+…+100

方法一:for循环累加 O(n)

var sum = 0;
for (var i = 0; i <= 100 ; i++){
	sum += i;
}

方法二: 公式法 求和公式 sum=n(n+1)/2 O(1)

常见面试总结

二叉树遍历- 前序、中序、后序:O(n) n表示二叉树的树的节点总数。遍历二叉树,每个节点都会被访问,且只被访问一次。

图的遍历: O(n) 每个节点访问一次

搜索算法:DFS深度优先、BFS广度优先的时间复杂度: O(n) 只访问一次节点,n为搜索空间节点总数

空间复杂度

1.数组的长度:空间复杂度。 一维数组O(n);二维数组O(n^2)

2.递归的深度

3.两者结合,取最大值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值