Python3 数据结构与算法之枚举

简介: Python3 数据结构与算法之枚举

何为数据结构?

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


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

相关文章
|
15小时前
|
机器学习/深度学习 人工智能 算法
【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
球类识别系统,本系统使用Python作为主要编程语言,基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集 '美式足球', '棒球', '篮球', '台球', '保龄球', '板球', '足球', '高尔夫球', '曲棍球', '冰球', '橄榄球', '羽毛球', '乒乓球', '网球', '排球'等15种常见的球类图像作为数据集,然后进行训练,最终得到一个识别精度较高的模型文件。再使用Django开发Web网页端可视化界面平台,实现用户上传一张球类图片识别其名称。
15 7
【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
|
11天前
|
存储 算法 数据可视化
算法金 | D3blocks,一个超酷的 Python 库
D3Blocks是一个基于d3.js的Python图形库,用于创建吸引人的数据可视化图表,如D3graph、Elasticgraph和Sankey图。拥有超过470个Star,其特点包括简易性、功能丰富、易用性、可定制性和及时更新。通过pip安装后,用户能轻松创建粒子图和其他图表。文中展示了实战应用,如能源数据集的网络图,通过调整节点和边的属性实现个性化展示。关注作者,享受智能乐趣。
45 8
算法金 | D3blocks,一个超酷的 Python 库
|
2天前
|
存储 算法 Python
python常用算法(5)——树,二叉树与AVL树(一)
python常用算法(5)——树,二叉树与AVL树
|
4天前
|
存储 缓存 调度
Python教程:一文了解10种数据结构在Python中的实现方法
数据结构是计算机科学中非常重要的概念,它用于组织和存储数据,使得数据可以高效地被访问和操作。在编程中,选择合适的数据结构对于解决问题和提高程序性能至关重要。
19 1
|
4天前
|
算法 数据可视化 Python
Python中的决策树算法探索
Python中的决策树算法探索
|
8天前
|
存储 算法 调度
力扣中级算法(Python)
力扣中级算法(Python)
|
8天前
|
算法 Python
力扣初级算法(Python)(二)
力扣初级算法(Python)(二)
|
10天前
|
搜索推荐 算法 UED
基于Python的推荐系统算法实现与评估
本文介绍了推荐系统的基本概念和主流算法,包括基于内容的推荐、协同过滤以及混合推荐。通过Python代码示例展示了如何实现基于内容的推荐和简化版用户-用户协同过滤,并讨论了推荐系统性能评估指标,如预测精度和覆盖率。文章强调推荐系统设计的迭代优化过程,指出实际应用中需考虑数据稀疏性、冷启动等问题。【6月更文挑战第11天】
50 3
|
8天前
|
存储 机器学习/深度学习 算法
【数据结构与算法】:手搓顺序表(Python篇)
【数据结构与算法】:手搓顺序表(Python篇)
|
8天前
|
存储 Python 容器
Python零基础入门-5 数据结构(集合和字典)
Python零基础入门-5 数据结构(集合和字典)