Python数据结构与算法(第一天)
一、算法引入
如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?
(1)
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))
(2)
import time
start_time=time.time()
for a in range(0,1001):for b in range(0,1001):c=1000-a-bif 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))
(1)反应速度要远慢于(2)。算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。算法是独立存在的一种解决问题的方法和思想。
算法特点
- 输入: 算法具有0个或多个输入
- 输出: 算法至少有1个或多个输出
- 有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成
- 确定性:算法中的每一步都有确定的含义,不会出现二义性
- 可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成
二、时间复杂度度与大O表示法
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))
T=1000*1000*1000*2
T(n)=n^3*2 时间复杂度
g(n)=n^3 大O表示法
import time
start_time=time.time()
for a in range(0,1001):for b in range(0,1001):c=1000-a-bif 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))
T(n)=n^2*(1+Max(0,1))
=n^2*2 时间复杂度
g(n)=n^2 大O表示法
三、最坏事件复杂度与计算规则
最优时间复杂度、最坏时间复杂度、平均时间复杂度。我们主要关注算法的最坏情况,亦即最坏时间复杂度。
计算规则
- 基本操作,即只有常数项,认为其时间复杂度为O(1)
- 顺序结构,时间复杂度按加法进行计算
- 循环结构,时间复杂度按乘法进行计算
- 分支结构,时间复杂度取最大值
- 判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略
四、常见时间复杂度与大小关系
五、代码执行时间测量模块timeit
class timeit.Timer(stmt='pass', setup='pass', timer=<timer function>)
stmt参数是要测试的代码语句(statment);
setup参数是运行代码时需要的设置;
timeit.Timer.timeit(number=1000000)
测试1000000次的平均耗时
六、Python列表类型不同操作的时间效率
def test1():li=[]for i in range(10000):li.append(i)def test2():li=[]for i in range(10000):li=li+[i]def test3():li=[i for i in range(10000)]def test4():li=list(range(10000))from timeit import Timer
timer1=Timer("test1()","from __main__ import test1")
print("append:",timer1.timeit(1000))from timeit import Timer
timer2=Timer("test2()","from __main__ import test2")
print("+:",timer2.timeit(1000))from timeit import Timer
timer3=Timer("test3()","from __main__ import test3")
print("i for i in range",timer3.timeit(1000))from timeit import Timer
timer4=Timer("test4()","from __main__ import test4")
print("list(range())",timer4.timeit(1000))
pop最后一个元素的效率远远高于pop第一个元素
七、Python列表与字典操作的时间复杂度
(1)list内置操作的时间复杂度
(2)dict内置操作的时间复杂度
八、数据结构引入
Python给我们提供了很多现成的数据结构类型,这些系统自己定义好的,不需要我们自己去定义的数据结构叫做Python的内置数据结构,比如列表、元组、字典。而有些数据组织方式,Python系统里面没有直接定义,需要我们自己去定义实现这些数据的组织方式,这些数据组织方式称之为Python的扩展数据结构,比如栈,队列等。
抽象数据类型(Abstract Data Type)
即把数据类型和数据类型上的运算捆在一起,进行封装
Python数据结构与算法(第一天)相关推荐
- Python天天美味(32) - python数据结构与算法之堆排序
1. 选择排序 选择排序原理是先选出最小的数,与第一个数交换,然后从第二个数开始再选择最小的数与第二个数交换,-- def selection_sort(data): for i in ran ...
- Python数据结构与算法(1.7)——算法分析
Python数据结构与算法(1.7)--算法分析 0. 学习目标 1. 算法的设计要求 1.1 算法评价的标准 1.2 算法选择的原则 2. 算法效率分析 2.1 大 OOO 表示法 2.2 常见算法 ...
- Python数据结构与算法(1.1)——数据结构与算法导论
Python数据结构与算法(1.1)--数据结构与算法导论 0. 学习目标 1. 数据结构概述 1.1 什么是数据结构 1.2 逻辑结构和物理结构 1.3 抽象数据类型 1.4 数据结构学习的必要性 ...
- python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图
python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...
- [FreeCodeCamp笔记] Python 数据结构和算法1 二分搜索 Binary Search
我以前学过数据结构和算法(data structure and algorithms. 现在普遍简称DSA),当时用的Robert Sedgewick的coursera课程.这位大神写的<算法( ...
- 视频教程-Python数据结构与算法面试(上)-Python
Python数据结构与算法面试(上) 东北大学计算机专业硕士研究生,欧瑞科技创始人&CEO,曾任国内著名软件公司项目经理,畅销书作者,企业IT内训讲师,CSDN学院专家讲师,制作视频课程超过1 ...
- Python数据结构与算法_9_有序链表
前情提要:Python数据结构与算法_8_链表.无序链表 接下来我们研究有序链表. 什么是有序链表 如果给定一个链表,他的节点数据元素都是的整数,如77, 26, 31, 93, 17, 54.如果这 ...
- python数据结构与算法13_python 数据结构与算法 (13)
python 数据结构与算法 (13) 选择排序 (Selection sort) 是? 种简单直观的排序算法. 它的? 作原理如 下.? 先在未排序序列中找到最?(?)元素, 存放到排序序列的起始位 ...
- python leetcode_leetcode 介绍和 python 数据结构与算法学习资料
for (刚入门的编程)的高中 or 大学生 leetcode 介绍 leetcode 可以说是 cs 最核心的一门"课程"了,虽然不是大学开设的,但基本上每一个现代的高水平的程序 ...
- Python数据结构与算法(二)栈和队列
本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...
最新文章
- Java IO类库之ObjectInputStream和ObjectOutPutStream
- c语言 %15s,c语言求助
- Android的简介
- 了解 XML 架构(XML与OO)
- 构建微服务体系结构的最佳实践
- ##HttpServletRequest 和 ##HttpServletResponse 基础知识
- java版spring cloud+spring boot+redis社交电子商务平台(十七)上传文件
- RepairImages\superboot-6410.bin
- 中国气象局所有城市代码
- wap2app是什么
- CCNA考试题库中英文翻译版及答案3
- 未转变者服务器可作弊,未转变者作弊指令有哪些-未转变者作弊指令大全
- MarkdownPad的livepreview预览无效,显示this view has crashed
- TLS握手协议分析与理解——某HTTPS请求流量包分析
- 证件照的尺寸规格和像素要求
- #matplotlib#如何设置坐标轴显示时间的范围
- SEM推广及广告投放数据分析及可视化
- 猫盘用服务器硬盘,猫盘硬盘数据的转移具体方法步骤
- 利用ES实现酒店搜索功能
- 阿里面试分享,4面技术5面HR附加笔试面,庆幸已经拿到offer了~
热门文章
- python分析双十一销量
- 零基础java自学就业_java零基础到就业需要多长时间呢?
- 优化缩短关中断的时间
- html显示后台传来的byte类型的数据_java的数据类型
- windows docker 卸载_安装Docker(Docker Toolbox)与Splash库
- 中石油2018年秋季C语言 试卷答案,[石油华东]《数据采集系统》2018年秋季学期在线作业...
- 论文笔记:Forecasting at Scale(Prophet)
- pytorch笔记:实例解析NLLLoss和CrossEntropyLoss
- R语言入门系列-软件下载,环境搭建,数据导入导出
- Python应用实战-Python五个实用的图像处理场景