数据结构和算法(代码执行时间测量模块timeit)

2024-02-23 13:32

本文主要是介绍数据结构和算法(代码执行时间测量模块timeit),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

考察python的执行效率,python在调用函数的时候,要考察其函数内部算法的效率,本文将利用python中timeit模块来测试一小段python代码的执行速度。

class timeit.Timer(stmt=‘pass’, setup=‘pass’, timer=timer function)

Timer是测量小段代码执行速度的类
stmt参数是要测试的代码语句(statment)
setup参数是运行代码时需要的设置
timer参数是一个定时器函数,与平台有关

timeit.Timer.timeit(number=1000000)

Timer类中测试语句执行速度的对象方法,number参数是测试代码时的测试次数,默认为1000000,方法返回执行代码的平均耗时,一个float类型的秒数。

python列表类型不同操作的时间效率

python生成列表的常见形式有一下四种:

  1. 两个列表的相加
  2. 列表生成器
  3. 可迭代对象转化为列表
  4. 对空列表进行元素追加

对于以上四种形式,自定义四种函数实现

#对空列表进行元素追加
def test1():li = []for i in range(10000):li.append(i)
def test2():li = []for i in range(10000):li =li + [i]
def test3():li = [i for i in range(10000)]
def test4():li = list(range(10000))def test5():li = []for i in range(10000):li.extend([i])    
from timeit import Timertimer1 = Timer('test1()','from __main__ import test1')
print("append追加:",timer1.timeit(1000))timer2 = Timer('test2()','from __main__ import test2')
print("求和:",timer2.timeit(1000))timer3 = Timer('test3()','from __main__ import test3')
print("列表生成器:",timer3.timeit(1000))timer4 = Timer('test4()','from __main__ import test4')
print("可迭代对象转化:",timer4.timeit(1000))timer5 = Timer('test5()','from __main__ import test5')
print("extend:",timer5.timeit(1000))
结果

append追加: 0.6496986700076377
求和: 0.7470834940031637
列表生成器: 0.30637266401026864
可迭代对象转化: 0.14538886799709871
extend: 0.9688844589982182

元素追加(append和insert)
def t6():li = []for i in range(10000):li.append(i) #尾部添加def t7():li = []for i in range(10000):li.insert(0,i)#头部添加 
timer6 = Timer('t6()','from __main__ import t6')
print("append:",timer6.timeit(1000))timer7 = Timer('t7()','from __main__ import t7')
print("insert:",timer7.timeit(1000))
结果

append: 0.6802220060053514
insert: 28.873230566998245

结果来看尾部添加的效率明显优于头部添加,这与python的列表数据存储方式决定的,后续写数据结构时将对此进行解答

同理,pop删除元素方式,从队头删除的效率要远远低于从队尾删除元素的效率。

list内置函数的时间复杂度

OperationBig-O Efficiency
index x[]O(1)
index assignmentO(1)
append()O(1)
pop()O(1)
pop(i)O(n)
insertO(n)
del operatorO(n)
iterationO(n)
contains(in)O(n)
get slice[x:y]O(k)
del sliceO(n)
set sliceO(n+k)
reverseO(n)
concatenameO(k)
sortO(nlogn)
multiplyO(nk)

dict内置函数的时间复杂度

OperationBig-O Efficiency
copyO(n)
get itemO(1)
set itemO(1)
delete itemO(1)
iterationO(n)
contains(in)O(1)

这篇关于数据结构和算法(代码执行时间测量模块timeit)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/738802

相关文章

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

redis数据结构之String详解

《redis数据结构之String详解》Redis以String为基础类型,因C字符串效率低、非二进制安全等问题,采用SDS动态字符串实现高效存储,通过RedisObject封装,支持多种编码方式(如... 目录一、为什么Redis选String作为基础类型?二、SDS底层数据结构三、RedisObject

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

python urllib模块使用操作方法

《pythonurllib模块使用操作方法》Python提供了多个库用于处理URL,常用的有urllib、requests和urlparse(Python3中为urllib.parse),下面是这些... 目录URL 处理库urllib 模块requests 库urlparse 和 urljoin编码和解码