Python算法的时间复杂度和空间复杂度(实例解析)


Posted in Python onNovember 19, 2019

算法复杂度分为时间复杂度和空间复杂度。

其作用:

时间复杂度是指执行算法所需要的计算工作量;
而空间复杂度是指执行这个算法所需要的内存空间。
(算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度)。

简单来说,时间复杂度指的是语句执行次数,空间复杂度指的是算法所占的存储空间

计算时间复杂度的方法:

  • 用常数1代替运行时间中的所有加法常数
  • 修改后的运行次数函数中,只保留最高阶项
  • 去除最高阶项的系数

时间复杂度

算法的时间复杂度是一个函数,它定量描述了该算法的运行时间,时间复杂度常用“O”表述,使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况

时间复杂度是用来估计算法运行时间的一个式子(单位),一般来说,时间复杂度高的算法比复杂度低的算法慢

print('Hello world') # O(1)
# O(1)
print('Hello World')
print('Hello Python')
print('Hello Algorithm')
for i in range(n): # O(n)
 print('Hello world')
for i in range(n): # O(n^2)
 for j in range(n):
 print('Hello world')
for i in range(n): # O(n^2)
 print('Hello World')
 for j in range(n):
 print('Hello World')
for i in range(n): # O(n^2)
 for j in range(i):
 print('Hello World')
for i in range(n):
 for j in range(n):
 for k in range(n):
  print('Hello World') # O(n^3)

 几次循环就是n的几次方的时间复杂度

n = 64
while n > 1:
 print(n)
 n = n // 2

 26 = 64,log264 = 6,所以循环减半的时间复杂度为O(log2n),即O(logn)

如果是循环减半的过程,时间复杂度为O(logn)或O(log2n)

常见的时间复杂度高低排序:O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)

空间复杂度

空间复杂度:用来评估算法内存占用大小的一个式子

a = 'Python' # 空间复杂度为1
# 空间复杂度为1
a = 'Python'
b = 'PHP'
c = 'Java'
num = [1, 2, 3, 4, 5] # 空间复杂度为5
num = [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]] # 空间复杂度为5*4
num = [[[1, 2], [1, 2]], [[1, 2], [1, 2]] , [[1, 2], [1, 2]]] # 空间复杂度为3*2*2

 定义一个或多个变量,空间复杂度都是为1,列表的空间复杂度为列表的长度

总结

以上所述是小编给大家介绍的Python算法的时间复杂度和空间复杂度,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
对于Python中线程问题的简单讲解
Apr 03 Python
Python使用minidom读写xml的方法
Jun 03 Python
python实现的多线程端口扫描功能示例
Jan 21 Python
深入理解Python3中的http.client模块
Mar 29 Python
Django中间件工作流程及写法实例代码
Feb 06 Python
python爬取网页转换为PDF文件
Jun 07 Python
selenium跳过webdriver检测并模拟登录淘宝
Jun 12 Python
Python实现串口通信(pyserial)过程解析
Sep 25 Python
Python dict和defaultdict使用实例解析
Mar 12 Python
python实现遍历文件夹图片并重命名
Mar 23 Python
Django+RestFramework API接口及接口文档并返回json数据操作
Jul 12 Python
Python tkinter界面实现历史天气查询的示例代码
Aug 23 Python
关于Flask项目无法使用公网IP访问的解决方式
Nov 19 #Python
Python算法中的时间复杂度问题
Nov 19 #Python
wxPython窗体拆分布局基础组件
Nov 19 #Python
Python解压 rar、zip、tar文件的方法
Nov 19 #Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
Nov 19 #Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
Nov 19 #Python
python flask搭建web应用教程
Nov 19 #Python
You might like
PHP5+UTF8多文件上传类
2008/10/17 PHP
基于PHP的简单采集数据入库程序【续篇】
2014/07/30 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
PHP中余数、取余的妙用
2015/06/29 PHP
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
常用的JavaScript验证正则表达式汇总
2013/11/26 Javascript
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
JavaScript实现自动跳转文本功能
2017/05/25 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
js实现飞机大战小游戏
2020/08/26 Javascript
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
Python线程中对join方法的运用的教程
2015/04/09 Python
python如何通过protobuf实现rpc
2016/03/06 Python
python 队列详解及实例代码
2016/10/18 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
django-allauth入门学习和使用详解
2019/07/03 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
python模拟预测一下新型冠状病毒肺炎的数据
2020/02/01 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
StubHub巴西:购买和出售您的门票
2016/07/22 全球购物
Python里面如何拷贝一个对象
2014/02/17 面试题
简历自荐信
2013/12/02 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
师德先进个人材料
2014/12/20 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python
Java并发编程之Executor接口的使用
2021/06/21 Java/Android