您的位置:首页 > 理论基础 > 数据结构算法

Python3 数据结构与算法之枚举

2017-10-25 14:49 288 查看

何为数据结构?

数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率

Python提供了很多现成的数据结构类型,这些系统自己定义好的,不需要我们自己去定义的数据结构叫做Python的内置数据结构,比如列表、元组、字典。而有些数据组织方式,Python系统里面没有直接定义,需要我们自己去定义实现这些数据的组织方式,这些数据组织方式称之为Python的扩展数据结构,比如栈,队列等。

何为算法?

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用时间(空间)复杂度来衡量来衡量。(百度百科)

数据结构和算法有什么关系?

数据结构只是静态的描述了数据元素之间的关系。

高效的程序需要在数据结构的基础上设计和选择算法。

每一个程序的构成都可以看做是数据结构和算法的结合。

枚举

一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。(百度百科)

引入一道题

如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?

初次思考该题,我们一定会想到定义a,b,c三个变量,如果对a,b,c三个变量进行枚举,那么a,b,c所能表示的数值又都是多少呢?

不难想到a,b,c具有相同的取值范围(0-1000),我们已经明确了范围,接下来对于a,b,c的范围以及题中所给定的对应关系进行运算。

import time
start_time = time.time()
for a in range(0, 1001):   #注意这里为什么是1001而不是1000
for b in range(0, 1001):
for c in range(0, 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("time is: %f" % (end_time - start_time))
print("over")

代码中我定义了开始时间和结束时间来计算具体的运行时间,经过长时间的等待终于运算完毕,从代码中我们不难发现我们嵌套了三个循环的程序,这也导致运算巨大,那么如何对代码进行改进?

从题的定义中我们不难发现,如果我们定义了a,b变量那么c变量则可以由1000-a-b得到,如此对代码进行修改。

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("time is :%d" % (end_time-start_time))
print("over")

运行该代码后就会发现所用时间会大大的减少,这便是我们运用算法对该题进行优化后的结果。
使用软件pycharm

版本Python3.6.1





                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: