算法一:timeit、顺序表(数据结构部分)
一、时间测试模块:timeit
timeit.Timer(stmt="pass", setup="pass",timer=<timer function>)
Timer是一个测量一小段代码或函数的执行速度的类。
参数:
- stmt参数:是要测试的代码语句statment
- setup参数:是运行代码时需要的设置,如import等
- timer参数:是一个定时器函数,与平台有关
Timer().timeit(number=1000000)
number参数:是测试代码时的测试次数,默认为1000000
返回值:执行代码的平时耗时,一个float的秒。
示例:
from timeit import Timer def test1(): li = [] for i in range(10000): li.append(i) def test2(): li = [] for i in range(10000): li += [i] def test3(): li = [i for i in range(10000)] def test4(): li = list(range(10000)) def test5(): li = [] li.append(3) timer1 = Timer(stmt="test1()", setup="from __main__ import test1") print("append 1万次,重复1000次的总耗时: ", timer1.timeit(1000)) # 1.5811931430042583秒,每次append的耗时:1.58/100000/1000 timer2 = Timer("test2()", "from __main__ import test2") print("+ 1万次,重复1000次的总耗时: ", timer2.timeit(1000)) # 1.6305902522296647秒 timer3 = Timer("test3()", "from __main__ import test3") print("列表解析 1万次,重复1000次的总耗时: ", timer3.timeit(1000)) # 0.7151811012795064秒 timer4 = Timer("test4()", "from __main__ import test4") print("range 1万次,重复1000次的总耗时: ", timer4.timeit(1000)) # 0.48484106005795624秒 print(Timer("test5()", "from __main__ import test5").timeit(1)) # 2.9255891043078464e-06秒
可见,对列表的操作:
- 快:list(range(number)、列表解析是最快的,append()、pop()对列表尾部的操作,[下标]也是很快的,基本上在1微秒左右
- 中:切片的时间复杂度,等于切片的长度,也是比较快的。
- 慢:insert,pop(i),sort,reverce,del,in等,相对而言要慢一点,在几十微秒级别
pop(i),最快是O(1),最坏是O(n) 。列表 是从后往前查找,如果i是最后一个元素的索引,那么就是O(1)

对于字典的操作:
快:get,set,delete,in都是很快的
慢:copy相对而言要慢一点
线性数据的存储有两种方式:顺序表和链表的存储方式,解决的是存储数据的方式问题。
队列、树、栈,是用线性存储方式中的顺序表或链表,根据某种算法,实现高级存储的问题。
二、顺序表
1.顺序表的概念

顺序表的原理,略
2.顺序表的结构与实现,略
https://www.bilibili.com/video/av17888409?p=4
3.顺序表的操作
https://www.bilibili.com/video/av17888431
4.python中的顺序表


posted on 2018-01-03 13:24 myworldworld 阅读(202) 评论(0) 收藏 举报

浙公网安备 33010602011771号