C++学习:时间空间复杂度

本文详细阐述了时间复杂度和空间复杂度的概念,包括如何通过基本操作和循环结构分析,以及在处理递归算法时的注意事项。重点强调了在评估算法性能时考虑最坏情况的重要性,并提到了利用已知结论简化复杂度分析的方法。
摘要由CSDN通过智能技术生成

1.时间复杂度

1)时间复杂度是衡量算法执行时间随输入规模增长的增长率。 2)通过分析算法中基本操作的执行次数来确定时间复杂度。 3)常见的时间复杂度包括:常数时间 O(1)、线性时间 O(n)、对数时间 O(logn)、平方时间O(n^2)等。 4)在计算的时候我们关注的是复杂度的数量级,并不要求严格的表达式。 一般我们关注的是最坏时间复杂度,用0(f(n))表示,大多数时候我们仅需估算即可。般来说,评测机1秒大约可以跑2e8次运算,我们要尽可能地让我们的程序运算规模级控制在1e8以内。

2.空间复杂度

1)空间复杂度是衡量算法执行过程中所需的存储空间随输入规模增长的增长率 2)通过分析算法中所使用的额外存储空间的大小来确定空间复杂度。 3)常见的空间复杂度包括:常数空间 0(1)、线性空间 0(n)、对数空间 0(log n)、平方空间0(n^2)等。 一般我们关注的是最坏空间复杂度,用O(f(n))表示,大多数时候程序占用的空间一般可以据开的数组大小精确算出,但也存在需要估算的情况。题目一般不会卡空间,一般是卡时间。 举个例子,假如题目限制128MB,1int32bit4Bytes,128MB32*2^20int3e7int

3.分析技巧

1.理解基本操作:基本操作可以是算术运算(加法、乘法、位运算等)、比较操作、赋值操作等。 2.关注循环结构:循环是算法中常见的结构,它的执行次数对于时间复杂度的分析至关重要 3.递归算法:递归算法的时间和空间复杂度分析相对复杂。需要确定递归的深度以及每个归调用的时间和空间开销。 4.最坏情况分析:对于时间复杂度的分析,通常考虑最坏情况下的执行时间。要考虑输入数据使得算法执行时间达到最大值的情况。 5.善用结论:某些常见算法的时间和空间复杂度已经被广泛研究和证明。可以利用这些已知结果来分析算法的复杂度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值