数据结构与算法
-
什么是数据结构?
- 广义上讲,数据结构就是一组有结构的数据
-
什么是算法
- 算法就是操作数据的方法
-
数据结构与算法的关系
- 数据结构与算法是相辅相成的。数据结构是为算法服务的,算要作用在特点的数据结构之上。
- 数据结构是静态的,它只是组织数据的一种方式。如果不在它的基础上操作、构建算法,孤立存在的数据是没有用的。
- 算法的引入
import time start_time = time.time() for a in range(1, 1001): for b in range(1, 1001): for c in range(1, 1001): if a**2 + b**2 == c**2 and a+b+c == 1000: print("a, b, c: %d, %d, %d" % (a, b, c)) end_time = time.time() print("times: %f" % (end_time - start_time))
import time start_time = time.time() for a in range(1, 1001): for b in range(1, 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('time:%f' % (end_time - start_time))
-
俩个代码的作用是一样的,但是效果是截然不同的
- 执行结果
time的单位是秒
第一次执行结果: a,b,c:200,375,425 a,b,c:375,200,425 time:1330.780704 第二次执行结果: a,b,c:200,375,425 a,b,c:375,200,425 time:1.239683
-
出现这种效果的原因就显而易见了,三个循环变为俩个循环,代码的规模数量级的递减,本来是1000的3次方变为了平方,所以执行时间的长短就显而易见了。
-
但是这不是绝对的,仅仅凭借时间是不准确的,这和测试环境也就是电脑CPU的运算速度是是有关系的。
-
既然凭借时间是不可靠的,所以引入了一种表示方法,大O表示法。
-
大O表示法
- 公式:T(n)=O(f(n))
- 利用timeit测试python内置的数据类型
def test1(): l =[] for i in range(1000): l = l + [i] def test2(): l =[] for i in range(1000): l.append(i) def test3(): l = [i for i in range(1000)] def test4(): l = list(range(1000)) def test5(): l = [] for i in range(1000): l.insert(0,1)# 按照索引添加 from timeit import Timer t1 = Timer("test1()","from __main__ import test1") print('add',t1.timeit(number=1000)) t2 = Timer("test2()","from __main__ import test2") print('append',t2.timeit(number=1000)) t3 = Timer("test3()","from __main__ import test3") print('list derivation',t3.timeit(number=1000)) t4 = Timer("test4()","from __main__ import test4") print('list range',t4.timeit(number=1000)) t5 = Timer("test5()","from __main__ import test5") print('list insert',t5.timeit(number=1000))
# 执行结果如下所示: add 1.9101277470447664 append 0.0971444667175394 list derivation 0.04159321139222838 list range 0.016761584285372777 list insert 0.43026811662878917
- 由于大O表示法公式各个字母代表的含义,在思维导图中已经写过了,就不在重复写了
- 以下是我用xmind做的学习笔记的思维导图
- 顺便提一下,用xmind做学习笔记比较方便,有想用的同学可以下载一下,只能普通的功能都是免费的,导出格式用png也是免费的,但是pdf需要激活订阅版或者直接购买才能使用。