Python与时间复杂度
Python内置性能分析
函数是对基本操作的封装,不能直接将函数看为一个基本操作!
timeit模块
from timeit import Timer
Timer(stmt='pass', setup='pass', timer=<timer function>)
// stmt : 要测试的代码语句,封装成函数
// 'pass': 字符串
// setup : 引入要测试的函数设置,因为测试需要在另外一个空间进行,
// 那个空间需要引入要测试的函数
// timer : 定时器,
测试:
# 这里直接导入了Timer这个类,如果用import timeit,则使用时要把Timer()换为timeit.Timer()
from timeit import Timer
# 进行列表的extend函数封装
def test_extend_time():
li = []
for i in range(10000):
li.extend([i])
# 进行列表的相加操作函数封装
def test_add_time():
li = []
for i in range(10000):
li = li + [i]
# 进行列表的append函数封装
def test_append_time():
li = []
for i in range(10000):
li.append(i)
# 进行迭代器列表化 函数封装
def test_range_time():
list(range(10000))
# 推导式
def test_for_time():
[i for i in range(10000)]
# 获得测试结果
get_extend_timer = Timer('test_extend_time()', 'from __main__ import test_extend_time')
print('get_extend_timer: ', get_extend_timer.timeit(1000)) # 测试1000次
get_add_timer = Timer('test_add_time', 'from __main__ import test_add_time')
print('get_add_timer: ', get_add_timer.timeit(1000))
get_append_timer = Timer('test_append_time()', 'from __main__ import test_append_time')
print('get_append_timer: ', get_append_timer.timeit(1000))
get_range_timer = Timer('test_range_time', 'from __main__ import test_range_time')
print('get_range_timer: ', get_range_timer.timeit(1000))
get_for_timer = Timer('test_for_time', 'from __main__ import test_for_time')
print('get_for_timer: ', get_for_timer.timeit(1000))
#结果为:
get_extend_timer: 0.6593919
get_add_timer: 6.899999999920858e-06
get_append_timer: 0.47652039999999996
get_range_timer: 6.900000000031881e-06
get_for_timer: 6.799999999973494e-06
list内置操作的时间复杂度
例:pop(i)从最坏时间复杂度考虑,即删除头部元素,则整个列表元素前移,复杂度为n
dict内置函数复杂度
注:字典的无序性和键的唯一性。