Skip to content

Commit f1ec9f4

Browse files
committed
26数据结构day01完成
1 parent 127f9bf commit f1ec9f4

File tree

2 files changed

+104
-0
lines changed

2 files changed

+104
-0
lines changed

26数据结构/day01/01basic.py

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
"""
2+
算法就类似于兵法, test1的执行时间为110s, 第二个执行时间为1s
3+
但是不能淡出的以时间来衡量,因为执行程序的机器配置不同,所以时间不能全面的反应算法的优劣
4+
"""
5+
import time
6+
7+
8+
def test1():
9+
start_time = time.time()
10+
for a in range(0, 1001):
11+
for b in range(0, 1001):
12+
for c in range(0, 1001):
13+
if a + b + c == 1000 and a ** 2 + b ** 2 == c ** 2:
14+
print("a, b, c: %d, %d, %d" % (a, b, c))
15+
16+
end_time = time.time()
17+
print("finished: %s" % (end_time - start_time))
18+
19+
20+
"""
21+
如果a+b+c=1000,且a^2+b^2=c^2的a,b,c的组合
22+
N是程序的规模,例子中N就是1000, a+b+c=N,描述的一类问题
23+
时间复杂度:就是程序执行的步骤, T(n) = N^3 * (1+1) 也就是1000的三次方
24+
大O记法:时间复杂度的简化分析,算法分析的是数量级和趋势,不计较规模函数中的常量因子,简化为O(n)=N^3,图线特征和趋势,类似于渐进函数
25+
26+
Test2中:T(n) = n * n * (1 + max(1, 0))
27+
= n ^2 *2
28+
= O(n^2)
29+
"""
30+
31+
32+
def test2():
33+
34+
start_time = time.time()
35+
for a in range(0, 1001):
36+
for b in range(0, 1001):
37+
# 此时c就已经确立了,不需要循环1000次了
38+
c = 1000 - a - b
39+
if a + b + c == 1000 and a ** 2 + b ** 2 == c ** 2:
40+
print("a, b, c: %d, %d, %d" % (a, b, c))
41+
42+
end_time = time.time()
43+
print("finished: %s" % (end_time - start_time))
44+
45+
46+
def test3():
47+
list1 = [1, 23, 4, 1, 4, 6]
48+
list2 = [1, 2, 3, 4, 5, 6]
49+
50+
"""
51+
如果排序list1和list2的话,list1的时间复杂度和N^2,最坏时间复杂度(一种保证),一般使用的就是最坏时间复杂度
52+
list2碰巧为有序的列表,遍历一次即可,时间复杂度为最优时间复杂度,没意义
53+
54+
基本操作算一个时间复杂度O(1) 即只有常数项
55+
顺序结构采用加法
56+
循环结构使用乘法
57+
分支结构采取最大值,if和else中谁的步骤多,if中的条件判断不加进去
58+
只关注数量级的最高项,一般忽略常量
59+
60+
"""
61+
62+
63+
if __name__ == '__main__':
64+
# test1()
65+
# test2()
66+
# test3()
67+
pass

26数据结构/day01/02basic.py

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
def test1():
2+
l = []
3+
for i in range(1000):
4+
l = l + [i]
5+
6+
7+
def test2():
8+
l = []
9+
for i in range(1000):
10+
l.append(i)
11+
12+
13+
def test3():
14+
l = [i for i in range(1000)]
15+
16+
17+
def test4():
18+
l = list(range(1000))
19+
20+
21+
from timeit import Timer
22+
23+
# setup中是从从__main__也就是当前文件名02basic中找到test1
24+
# 创建一个timer对象
25+
t1 = Timer(stmt="test1()", setup="from __main__ import test1")
26+
print("concat ", t1.timeit(number=1000), "seconds")
27+
t2 = Timer("test2()", "from __main__ import test2")
28+
print("append ", t2.timeit(number=1000), "seconds")
29+
t3 = Timer("test3()", "from __main__ import test3")
30+
print("comprehension ", t3.timeit(number=1000), "seconds")
31+
t4 = Timer("test4()", "from __main__ import test4")
32+
print("list range ", t4.timeit(number=1000), "seconds")
33+
34+
# ('concat ', 1.7890608310699463, 'seconds')
35+
# ('append ', 0.13796091079711914, 'seconds')
36+
# ('comprehension ', 0.05671119689941406, 'seconds')
37+
# ('list range ', 0.014147043228149414, 'seconds')

0 commit comments

Comments
 (0)