算法入门(一):认识复杂度

原创不易~看完若对你有所帮助,记得点一个赞哈,这就是对我最大的支持了!

常数操作

一个操作如果和样本的数据量没有关系,每次都是固定时间,就是常数操作

例如数组中取出i位置的数字就是常数操作,无论arr长度,寻址操作都是一个常数操作,计算一个偏移量就行了:

int a = arr[i];

其他例如位运算等都是常数操作

但是链表里面的查找,以及很多框架的API都不是常熟操作:

image.png

时间复杂度

选择排序了解与引入时间复杂度

这个排序思路很简单,先从0到N找最小值,然后记录最小值index和0位置交换,然后从1-N重复上述操作就可以

image.png

0-N-1 首先我们需要看一下比较谁小 , 需要看N次

接着我们从1-N重复上面,需要看N-1次

最后总结所有的常数操作次数,有如下图的等差数列关系:

image.png

然后最后的时间复杂度是忽略低阶项和常数项,只能最高阶项(去除系数)。

所以最后的时间复杂度是N^2.

然后常见的大O是代表上限,就是算法最坏情况下的时间复杂度,一般使用的也是这种作为算法的复杂度,看到的就是O(N^2)

同样时间复杂度怎么拼好坏

都是N^2复杂度,怎么比较算法好还呢?这样只能拼后面的常数项,但是这个没办法估计通过理论知识。

唯一推荐方法是实际去跑,去做测试来确定两个算法谁优秀

总结回顾

  • 常数操作:一个操作和样本的数据量没有关系,每次都是固定时间完成的操作叫做常熟操作
  • 时间复杂度为一个算法流程中,常数操作量的指标。常用大O表示。需要对算法流程比较熟悉,然后写出算法流程中常熟操作的次数,进而总结出公式
  • 表达式中,只要高阶项,不要低阶项,也不要高阶项系数,剩下部分如果为F(N),那么时间复杂度就是O(F
    (N))
  • 评价一个算法流程好坏,先看时间复杂度指标,然后再分析不同样本数据下的实际运行时间,也就是“常数项时间”
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值