Problem3415--时空复杂度

3415: 时空复杂度

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 128 MiB

Description

时间复杂度 
(1)时间复杂度是衡量算法执行时间,随输入规模增长的增长率。
(2)通过分析算法中基本操作的执行次数来确定时间复杂度。
(3)常见的时间复杂度包括:常数时间O(1),线性时间O(n),对数时间O(log n),平方时间O(n^2)等。
(4)在计算的时候我们关注的是复杂度的数量级,并不要求严格的表达式。

一般我们关注的是最坏时间复杂度,用O(f(n)) 表示,大多数时候我们仅需估算即可。
一般来说,评测机1秒大约可以跑2e8次运算,我们要尽可能地让我们的程序运算规模数量级控制在1e8以内。 

空间复杂度
(1)空间复杂度是衡量算法执行过程中所需的存储空间随输入规模增长的增长率。 
(2)通过分析算法中所使用的额外存储空间的大小来确定空间复杂度。 
(3)常见的空间复杂度包括:常数空间 O(1),线性空间O(n),对数空间O(log n),平方空间O(n^2)等。

一般我们关注的是最坏空间复杂度,用O(f(n)) 表示,大多数时候程序占用的空间一般可以根据开的数组大小精确计算出,
但也存在需要估算的情况。题目一般不会卡空间,一般是卡时间。
举个例子,假如题目现在128MB,1int~32bit~4Bytes, 128MB~32*2^20int~3e7int 

分析技巧

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

Source/Category