【算法】时间复杂度效率评估

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

算法的效率评估分为:时间效率,即时间复杂度(time complexity);空间效率,即空间复杂度(space complexity)。现在绝大多数情况下,空间复杂度受限的可能性较低,且优化代价高,效果差,所以以考虑时间复杂度为主。
时间复杂度并非指绝对时间,而是评估随着输入规模的增长,消耗时间的增长量级。


一、定义

n:输入规模。简单举例,输入为矩阵,n可以根据具体场景定义为行数,也可以定义为列数,也可以定义为元素个数,根据需求进行定义。
C(n):基本操作次数
t(n):一个算法的运行时间(常用C(n)表示)
g(n):一个用来和操作次数做比较的函数
O:算法复杂度的上边界,用来评估最恶劣情况,用于算法选取,常写作O(g(n)) = n2或者O(n) = n2
Ω:算法复杂度的下边界,用来评估最优情况,用于算法初选
θ:算法复杂度的上下边界带,用于评估算法时间稳定性

二、复杂度等级

复杂度梯度:1 <log < n < n*log n < n2 < n3 < 2n < n!
备注:
1、loga n = loga b * logb n,因而上述log n不含下标,即复杂度为loga n和logb n的算法均视为log n复杂度,但实际上两者差一个常量系数。
2、当n->∞,n + b = n + a,a为常量。即复杂度为n + b和复杂度为n + a的算法均视为n复杂度,但实际上两者差一个常量偏差。
3、复杂度比较方法, lim n->∞ f1(n) / f2(n) ,例如复杂度n!与2n比较如下,所以2n < n!
在这里插入图片描述
4、基于以上,可以推测评估算法复杂度时,在不限制输入规模的情况下,只考虑复杂度最高的内容进行评估

三、分析方法

1、决定用哪个(哪些)参数表示输入规模
2、找出算法的基本操作(常见于算法的最内层循环中)
3、检查基本操作的执行次数是否只依赖于输入规模。如果还依赖于其他特性,则最差效率、平均效率以及最优效率需要分别研究
4、建立一个算法基本操作执行次数的求和表达式
5、利用求和运算的标准公式和法则来建立一个操作次数的闭合公式,或者至少确定它(闭合公式)的增长次数

四、总结

1、在规模无限制的情况下,算法的时间复杂度基本只考虑对输入元素的计算次数的最大复杂度。
2、对中等规模输入,算法的时间复杂度考虑最大复杂度和高复杂度核心耗时部分。
3、对于有限小规模输入,只要算法实际耗时可以接受即可。
4、注意工程整体的复杂度,对于高频调用的函数,需要尽可能降低复杂度,并控制时间。
5、时间复杂度为1或者log n的属于极为优秀的算法。
6、复杂度的详细计算举例参考:链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值