算法一: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)    收藏  举报

导航