算法效率笔记

一个好的算法需要正确性,可读性,健壮性,高效性。

前三个没什么需要注意的,但是说到高效性,那么

,根据实际需求,这就要求我们进行取舍了。

接下来我们看看如何对算法运行时间进行度量

第一种方法有缺点,首先受环境影响,不写完代码不能看到结果

第二种方法:一次操作的时间*总操作次数

看第一行,这里注意,for循环的每一次判断都是对for的一次执行,不一定非要判断成功了才算是他的执行

看第二行,这里由于外层的for成功判断了,n次,所以你的这个第二个for语句需要运行n*(n+1)次

第三行,这里是上面的两个for都成功判断了n次,所以是n*n次。

另一种方法,说人话就是比较一下数量级。

这叫渐进时间复杂度。

可以这么表示

但是省流:找出次数最高的一个,就可以和其他的算法的复杂度进行比较了。

贡献最大的这位称为基本操作

在这几种数据中n的选取方法

来看一下可有可无的定理,说人话就是只看最高次项

记得写法不要错哦,记得写

当然,这里有旁门左道,就是找到嵌套最深的,他的最高次就可以了

就是这个算法的渐进时间复杂度

在看一个例子

其中有几点需要注意的,首先就是求和符号的用法,从实际意义来看

就是把k从一变成j的过程中,1的所有取值求出来

当然,1是不变的,所以直接就是j

再看这个

就是把j从j变化到i的过程中所有j的值求和,所以得到i(i+1)/2

最后算这个,这个可以分开来算,否则太复杂辣

得到这么一个东东

其中有一个结论,n*n从1到n的求和就是这个n(n+1)(2n+1)

在看一个例子吧

其中呢,找出那个i的所谓的通项公式是关键

二时间复杂度的其他注意事项

通常我们会考虑最坏和平均。

还有就是

这玩意之前都说过了,芜湖

当然,还可以通过函数的样子来判断

分割线--------------------------------------------------------------------------------------

上面都是时间效率的讨论,接下来说说空间效率

概览

例子看看

其中t占用的空间就是辅助空间

占用的空间是1,称为常数阶,称为原地工作

第二个占用的显然和我们的数组的元素个数成一次函数的关系,称为一次阶

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值