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.善用结论:某些常见算法的时间和空间复杂度已经被广泛研究和证明。可以利用这些已知结果来分析算法的复杂度。