浅谈时间复杂度与空间复杂度

前言:

但凡涉及到了算法,我们逃不过去的一个问题,也是不可以逃避的一个问题就是时间复杂度与空间复杂度。这两项是检验算法优劣的标准之一,或者说是主要标准。

时间复杂度:

例子 时间复杂度 装逼术语
5201314 O(1) 常数阶
3n+4 O(n) 线性阶
3n^2+4n+5 O(n^2) 平方阶
3log(2)n+4 O(logn) 对数阶
2n+3nlog(2)n+14 O(nlogn) nlogn阶
n^3+2n^2+4n+6 O(n^3) 立方阶
2^n O(2^n) 指数阶

时间复杂度记为:T(n)= O(f(n))。其实在考虑时间复杂度的时候可以看做是极限,一种求极限的思想可以帮助我们很好的理解时间复杂的计算问题。当n—>无穷时,对整个式子其主要因素的是数量级的影响,一种Max思想。用考研数学的一句顺口溜来记就是:高指低对低次走,归幂之后低次留。

时间复杂度消耗时间从小到大依次是: O(1) < O(logn) < (n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n) 。一般n^3之后的就不考虑了,太大了已经。

空间复杂度:

空间复杂度记为:S(n)= O(f(n))。相对于时间复杂度来讲空间复杂度就显得相对于弱一些,或者说体现算法的主要因素还是时间,我们可以牺牲一部分空间来换取时间,当然也可以牺牲一部分时间来换取空间,不同情况要不同考虑。只是一般情况下以时间复杂度为优先考虑。反例就是比如你玩的是单片机,硬件流派。你的内存空间是有限的,就那么大,你要以空间为主。

我们再来举个例子:判断一个年份是不是闰年。

  • 写一个简单算法来判断,如
bool isLeapYear(int y){
 	return (y%4==0&&y%100!=0)||(y%400==0);
 }
  • 或者是定义一个数组,如arr[2050],将所有年份存进去,是闰年就为1,否为0 。
  • 这时候我们来区分一下这两个,第一种利用算法,消耗的是cpu,每次年份都要进行运算。而第二种利用数组,每次年份只需要一次索引判断即可。这也就是,时间换空间还是空间换时间的问题。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值