算法效率的度量方法

影响算法效率的情况:

1.算法采用的策略,方案
2.编译产生的代码质量
3.问题的输入规模
4.机器执行指令的速度
所以,抛开计算机硬件,软件,有关因素,一个程序的运行时间依赖于算法的好坏和问题的输入规模(输入规模是指,输入量)

算法的效率高一般是指算法的执行时间,其判断算法的效率方法有:(研究算法的复杂度,侧重是研究算法随着输入规模扩大,增长量的一个抽象,分析一个算法运行时间,重要的是把基本操作的数量和输入模式关联起来)

1)事后统计法这种方法主要通过设计好的测试程序和数据,利用计算器计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低(缺点,必须依据算法一对一编写测试程序,花销大,且如果算法效率低,则赔了夫人又折兵)

函数渐进增长:

函数渐进增长:给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,那么,我们说f(n)的增长渐进快于g(n)

若是比较2n+3和3n+1的优势,则n<2时3n+1效率更好,n>2时2n+3更好,常数3和1影响不大情况下,一般可以忽略
同理,若是4n+8和2n^2+1,,与最高次项相乘的常数也不重要
同理,2n2+3n+1和2n3+1,随着n的增长,3n+1可以忽略
所以判断一个算法的效率,我们更应该去关注主项的阶数

算法的时间复杂度的定义

算法的时间复杂度的定义:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级,算法的时间复杂度也就是算法的时间量度,记作T(n)=O(f(n)),他表示,随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度,其中f(n)是问题规模n的某个函数。

O()称作大O记法,一般来说,随着输入规模n的增大,T(n)增长最慢的算法为最优算法

其中:
用常数1取代运行时间中的所以加法常数
在修改后的运行次数的函数中,只保留最高项
如果最高项存在且不是1,那么去除与这个最高项相乘的常数
得到的就是算法的时间复杂度

常用的事件复杂度所耗费时间大小依次是:

O(1)<O(log n)<O(n)<O(n* log n)<O(n^2)<O(n ^3)<O(2 ^n)<O(n!)<O(n ^n)

最坏运行时间和平均运行时间

平均运行时间是期望的运行时间
最坏运行时间是一种保证。通常除非特定情况,我们提到的运行时间都是最坏情况的运行时间。

算法空间复杂度

一般可以通过空间换时间或者时间换空间的方法满足自己的需求

算法的空间复杂度通过计算算法所需的储存空间实现,算法的空间复杂度的公式记作S(n)=O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占储存空间的函数

通常我们用空间复杂度指空间需求,用时间复杂度来指运行时间的需求,直接求复杂度,就是指时间复杂度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值