一. Python数据结构与算法(1概念引入_2)

提示:1-03 最坏时间复杂度与计算规则_哔哩哔哩_bilibili


前言

本文主要讲解了算法的效率分析、常见的复杂度,并通过timeit模块来初步确定Pyhon的运行性能分析。

1. 引入_2

1.5 算法效率的分析

分析算法时,存在几种可能的考虑:
算法完成工作最少需要多少基本操作,即最优时间复杂度
算法完成工作最多需要多少基本操作,即最坏时间复杂度。

算法完成工作平均需要多少基本操作,即平均时间复杂度
对于最优时间复杂度,其价值不大,因为它没有提供什么有用信息,其反映的只是最乐观最理想的情况,没有参考价值。
对于最坏时间复杂度,提供了一种保证,表明算法在此种程度的基本操作中一定能完成工作
对于平均时间复杂度,是对算法的一个全面评价,因此它完整全面的反映了这个算法的性质。但另一方面这种衡量并没有保证,不是每个计算都能在这个基本操作内完成。而且,对于平均情况的计算,也会因为应用算法的实例分布可能并不均匀而难以计算。因此,我们主要关注算法的最坏情况,亦即最坏时间复杂度。

时间复杂度的几条基本计算规则

1.基本操作,即只有常数项,认为其时间复杂度为O(1)


2.顺序结构,时间复杂度按加法进行计算


3.循环结构,时间复杂度按乘法进行计算


4.分支结构,时间复杂度取最大值; 哪个分支步数最多,就是多少


5.判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略


6.在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度

举个例子就是上一节所提到的优化过后的代码的时间复杂度计算:

1.6 常见复杂度

如上表所示,这个是常见的复杂度计算方式。

1.7 Python内置类型性能分析

我们可以通过Python里内置的timeit来去

列表知识点1:列表可以相加得到一个新列表;

列表知识点2:列表也可以通过for循环得到;

列表知识点3:Python2通过range操作可以直接返回列表;但是Python3需要配合list()生成。

列表知识点4:可以直接往列表里加

然后我们分别定义刚才不同方法的列表,并比较时间。

知识点5:timer参数是一个定时器函数,与平台有关。

知识点6:timer.timeit(number)是Timer类中测试语句执行速度的对象方法。number默认为1000000次,输出执行代码的平均耗时。

知识点7:timeit.Timer.timeit(1000) 真实的函数调用

最后我们可以通过timeit中的Timer来

下面开始一个从尾部追加,一个从列表头部追加,看下这两种到底有无区别。

可以看出insert运行要比append慢,至于为什么慢,等讲到1.8节的时候,我们就会明白。

另外,list()类型和dict()类型实际上是不能算作基本数据类型的,只是Pyhton给我们封装好的。那么基本数据类型就是字符、整型和浮点型。而list和dict只是Python给我们封装好的一个容器,而非基本类型。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值