数据结构及算法-01算法引入
算法引入
import time
start_time = time.time()
for a in range(0, 1001):
for b in range(0, 1001):
for c in range(0, 1001):
if a+b+c == 1000 and a**2 + b**2 == c**2:
print("a, b, c:%d, %d, %d" % (a, b, c))
end_time = time.time()
print("times:%d" % (end_time -start_time))
print("finished")
执行结果
a, b, c:0, 500, 500
a, b, c:200, 375, 425
a, b, c:375, 200, 425
a, b, c:500, 0, 500
times:286
finished
另一种算法
import time
start_time = time.time()
for a in range(0, 1001):
for b in range(0, 1001):
c = 1000 - a - b
if a**2 + b**2 == c**2:
print("a, b, c:%d, %d, %d" % (a, b, c))
end_time = time.time()
print("times:%d" % (end_time -start_time))
print("finished")
执行结果
a, b, c:0, 500, 500
a, b, c:200, 375, 425
a, b, c:375, 200, 425
a, b, c:500, 0, 500
times:1
finished
算法的概念
算法是独立存在的一种解决问题的方法和思想
算法的特性:
- 输入
- 输出
- 有穷性
- 确定性
- 可行性
算法效率衡量
时间复杂度
基本运算数量个数
T1 = O(n^3)
T2 = O(n^2)
只考虑与n相关的数量级,忽略常量系数(最后的循环中有2个还是10个操作)
最优时间复杂度
最坏时间复杂度
平均时间复杂度
一般时间复杂度指最坏时间复杂度
时间复杂度计算规则:
常见时间复杂度
Python内置类型性能分析
from timeit import Timer
def test1():
li = []
for i in range(10000):
# li += [i] 不完全等于以下语句, 有优化
li = li + [i]
def test2():
li = []
for i in range(10000):
li.append(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])
def test6():
li = []
for i in range(10000):
li.insert(0, i)
timer1 = Timer("test1()", "from __main__ import test1")
print("+:", timer1.timeit(number=1000))
timer2 = Timer("test2()", "from __main__ import test2")
print("append:", timer2.timeit(number=1000))
timer3 = Timer("test3()", "from __main__ import test3")
print("构造器:", timer3.timeit(number=1000))
timer4 = Timer("test4()", "from __main__ import test4")
print("类型转换:", timer4.timeit(number=1000))
timer5 = Timer("test5()", "from __main__ import test5")
print("extend:", timer5.timeit(number=1000))
timer6 = Timer("test6()", "from __main__ import test6")
print("insert:", timer6.timeit(number=1000))
执行结果
+: 1.9438251314738715
append: 2.0546681004856353
构造器: 0.9054245635968021
类型转换: 0.5199876041759088
extend: 2.7770162085994707
insert: 42.24719570966755
数据结构
静态的描述了数据元素之间的关系
程序 = 数据结构+算法
抽象数据类型 ADT
数据组装方式 + 所支持的操作