数据结构和算法(代码执行时间测量模块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

相关文章

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

python中time模块的常用方法及应用详解

《python中time模块的常用方法及应用详解》在Python开发中,时间处理是绕不开的刚需场景,从性能计时到定时任务,从日志记录到数据同步,时间模块始终是开发者最得力的工具之一,本文将通过真实案例... 目录一、时间基石:time.time()典型场景:程序性能分析进阶技巧:结合上下文管理器实现自动计时

Python如何获取域名的SSL证书信息和到期时间

《Python如何获取域名的SSL证书信息和到期时间》在当今互联网时代,SSL证书的重要性不言而喻,它不仅为用户提供了安全的连接,还能提高网站的搜索引擎排名,那我们怎么才能通过Python获取域名的S... 目录了解SSL证书的基本概念使用python库来抓取SSL证书信息安装必要的库编写获取SSL证书信息