关于时间复杂度与空间复杂度总结

简单来说,时间复杂度指的是语句执行次数,空间复杂度指的是算法所占的存储空间。

一般情况下,随着n的增大,T(n)增长最慢的算法为最优算法。

1.对于简单的输入输出语句或赋值语句(无循环语句),近似认为需要 O(1)。一般来说,只要算法中不存在循环语句,其时间复杂度就是 O(1)。

2.对于顺序结构,需要依次执行一系列语句所用时间可采用 "求和法则"。

3.对于判断条件语句来说,一般是求它的最差时间复杂度。

4.对于循环语句来说,只考虑循环体中语句的执行次数。当有若干个循环语句,则复杂度由最深层的循环内的基本语句的频度f(n)决定的。

5.对数时间复杂度:当每次操作都能将所需要检测的元素减少一半时(即每次操作,未检测元素减少一半),这样的时间复杂度为 O(logn)。

6.如果一个算法的执行次数是 T(n),那么只保留最高次项,同时忽略最高项的系数后得到函数 f(n),此时算法的时间复杂度就是 O(f(n))。为了方便描述,下文称此为 大O推导法。推导方法:1代替常数;只保留最高阶;最高阶不是1时去掉最高阶的系数。

7.时间复杂度分析的基本策略是:从内向外分析,从最深层开始分析。如果遇到 函数调用,要深入函数进行分析。

8.O(1) 常数阶 < O(logn) 对数阶 < O(n) 线性阶 < O(nlogn) < O(n^2) 平方阶 < O(n^3) < { O(2^n) < O(n!) < O(n^n) }
最后三项用大括号把他们括起来是想要告诉大家,如果日后大家设计的算法推导出的“大O阶”是大括号中的这几位,那么趁早放弃这个算法,在去研究新的算法出来吧。因为大括号中的这几位即便是在 n 的规模比较小的情况下仍然要耗费大量的时间,算法的时间复杂度大的离谱,基本上就是“不可用状态”。

扫描二维码关注公众号,回复: 4227220 查看本文章

9.空间复杂度为1时,表示这个变量与问题规模n大小无关。

猜你喜欢

转载自www.cnblogs.com/lryepoch/p/10016135.html