时间复杂度与空间复杂度

前言

学习数据结构时我们会接触到各种各样的算法,这时需要引入一些评价机制来评价各种算法的优劣,当然对于不同的实际问题可能会有多种的解决方法,不同的解决方法也会有其特别适用的问题。

时间复杂度

1)时间复杂度是衡量算法执行时间随输入规模增长的增长率。

2)通过分析算法中基本操作的执行次数来确定时间复杂度。

3)常见的时间复杂度包括:常熟时间O(1)、线性时间O(n)、对数时间O(log n)、平方时间O(n2)等

4)在计算的时候我们关注的是复杂度的数量级。

一般来说我们关注的是最坏时间复杂度,用O(f(n))表示,大多数时候我们仅需估算即可。

一般来说,评测机1s大约可以跑2e8次运算,我们要尽可能地让我们的程序运算规模的数量级控制在1e8以内。

空间复杂度

1)空间复杂度是衡量算法执行过程中所需地存储空间随输入规模增长的增长率。

2)通过分析算法中所使用的额外存储空间的大小来确定空间复杂度。

3)常见的空间复杂度包括:常数空间O(1)、线性空间O(n)、对数空间O(log n)、平方空间O(n2)等。

一般我们关注的是最坏空间复杂度,用O(f(n))表示,大多数时候程序占用的空间一般可以根据开的数组大小精确算出,但也存在需要估算的情况。题目一般不会卡空间,一般是卡时间。

分析技巧

1)基本操作:基本操作可以是算术运算(加法、乘法、位运算等)、比较操作、赋值操作。这些操作我们称为原子操作O(1),如果某算法只执行这些操作n次就称该算法的时间复杂度是O(n),n2次就称时间复杂度是O(n2)例如两层for循环。

2)循环结构:循环是算法中常见的结构,它的执行次数对于时间复杂度的分析至关重要。

3)递归算法:递归算法的时间和空间复杂度分析相对复杂,需要确定递归的深度以及每个递归调用的时间和空间开销。对于递归算法最常用的方法是画一棵递归树(二叉树),如果树有n层则22 

4)最坏情况分析:对于时间复杂度的分析,通常考虑最坏情况下的执行时间。要考虑输入数据使得算法执行时间达到最大值的情况。

5)善用结论:某些常见算法的时间和空间复杂度已经被广泛研究和证明。可以利用这些已知结果来分析算法的复杂度。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值