算法效率的度量方法

算法效率前沿:

事前分析估算方法:在计算机程序编写前,依据统计方法对算法进行估算。

程序运行是所消耗的时间却决于:

1.算法采用的策略和方案

2.编译产生的代码的质量

3.问题的输入规模

4.机器执行指令的速度

所以程序运行的速度快慢除了依靠硬件和软件之外,就是算法的质量和输入的规模

引入时间复杂度

1.第一种:

            int i, sum = 0, n = 100; //执行1次
            for (i = 1;i <= n;i++)//执行n+1次
            {
                sum = sum + i;//执行n次
            }

执行次数为:2n+2

2.第二种:

int sum = 0, n = 100; //执行1次
sum = (1 + n) * n / 2;//执行1次
执行次数为:2

如果我们把循环看作一个整体,忽略头尾判断的开销,那么这两个算法其实就是n和1的差距。即第一种的时间复杂度是n,第二种的时间复杂度是1。

研究算法的复杂度,侧重的是研究算法随着输入规模扩大增长量的一个抽象,而不是精确的定位需要执行多少次。

这样,不计那些循环索引的递增和循环终止条件,变量声明,打印结果等操作。最终,在分析程序的运行时间时,最重要的是把程序堪称是独立于程序设计语言的算法或一系列步骤。

Test1:2n+3次执行次数 VS 3n+1次执行次数

随着n的增长,后面的+3和+1其实是不影响最终的算法变化曲线,所以我们可以忽略这些加法常数。

Test2:4n+8次执行次数 VS 2n²+1次执行次数

随着n的增长,哪怕去掉与n相乘的常数,两者的结果还是没有改变,算法4n+8的次数随着n的增长,还是远小于算法2n²+1

Test3:2n²+3n+1 VS 2n³+3n+1

随着n的增长,最高次项的指数大的,函数随着n的增长,结果也会变得增长特别快

Test4:2n²+3n+1 VS 2n²

随着n的增长,最后求得的值就会非常的近似,所以判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注主项(最高项)的阶数。







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值