成为VIP会员查看完整内容
VIP会员码认证
首页
主题
发现
会员
服务
注册
·
登录
0
大O符号和代码效率:花最少的精力得到最大的产出
2020 年 10 月 10 日
THU数据派
来源:读芯术
本文
约
1386
字
,建议阅读
4分钟
。
本文
介绍了大O符号,以及其作用:度量时间复杂度和空间复杂度。
图源:unsplash
首先,什么是代码效率?这个热门术语在各种会议、讲座和博客中已经被用滥了。它被广泛用于描述代码的速度和可靠性,与软件的算法效率和运行时执行速度密切相关。在当下,这个人工智能、可扩展性和机器学习处于软件开发前沿的时代,这个话题始终被反复提及。
那么什么是大O符号呢?在计算机科学领域中,它是用来描述算法的性能和效率以及分析整体性能的工具,被用于确定完成算法执行所需时间或空间的最坏情况。大O符号是基于性能来确定函数最佳实现的宝贵工具,它提供了一种正式的说法,用于讨论算法的运行时间如何根据输入而变化。
时间复杂度vs空间复杂度
大O符号用于度量时间复杂度和空间复杂度。
· 时间复杂度:为完成整体操作而必须执行的小操作的数量。
· 空间复杂度:运行算法中的代码所需的额外内存量——通常被称为辅助空间复杂度,也就是说它仅指代算法所占用的空间,不包括输入所占用的空间。
复杂度类型
时间复杂度可以分为几种不同的类型。下列是几种较常见类型:
· 常数阶/O(1):无论数据集多大,始终在相同的时间或空间中执行。
· 对数阶/O(log n):为获得给定数据,固定数据所必须增加的幂。
· 线性阶/ O(n):复杂度与输入数据的大小直接相关。
· 线性对数阶/ O(nlog n):对输入中的每一项执行O(log n)操作。
· 平方阶/O(n²):性能与输入数据的平方大小成正比。
图源:Colt Steele的JavaScript算法和数据结构大师班
有助于确定时空复杂度的一般规则
这些规则是可以起作用的方向,但不保证每次都有效果。
确定时间复杂度:
· 算术运算恒定
· 变量赋值为常数
· 数组(通过索引)或对象(通过键)中的访问元素是常量
· 在循环中,复杂度是循环的长度乘以循环内发生的任何事情的复杂度。
确定空间复杂度:
· 大多数基元是常量空间。(布尔常量,数字,未定义变量,空。)
· 字符串需要O(n)空间,其中n是字符串的长度。
· 引用类型通常为O(n),其中n是对象的数组长度或键数。
来看一些例子
在上面的例子中,操作数量与n大致成比例增长。因此,如果n是100,那么i将被加到100倍。
addUpToN
的时间复杂度将是线性阶/O(n)。
至于空间复杂度,addUpToN有2个变量赋值(total和i)。当循环完成其操作时,这些变量会被重新分配,但无论输入数据集的大小如何,这些变量占用的空间都保持不变。空间复杂度将为常数阶/O(1)。
这里有3个简单的运算(乘、加、除)。不管n的大小如何,操作的数量保持不变。addUpToNAgain的时间复杂度为常数阶/O(1)。
此时只会返回一个值。输入值不会改变分配给此函数的空间。因此,空间复杂度也是线性阶/O(1)。
在这里,有一个线性阶O(n)运算嵌套在另一个O(n)运算中。当输入的n值缩放时,运行时间随之发生变动。sumEachPair的时间复杂度是平方阶/O(n²)。
回顾一下前文所述的一般规则,这个案例正好对应了其中一条:引用类型一般是O(n),其所需的空间量与输入值直接相关。空间复杂度则为线性阶/O(n)。
想分析算法的性能,可以使用大O符号帮助分析,大O符号可以加深对算法的时间和空间要求的理解。
总之,程序员要理解好所编写的代码的时空复杂度,进而确保运行时间和执行速度达到最快,同时保证代码始终保持在其运行系统的实体存储范围内,“修炼”成一个高效的程序员。
——
EN
D
——
登录查看更多
点赞并收藏
0
暂时没有读者
0
权益说明
本文档仅做收录索引使用,若发现您的权益受到侵害,请立即联系客服(微信: zhuanzhi02,邮箱:bd@zhuanzhi.ai),我们会尽快为您处理
相关内容
算法
关注
158
在数学和计算机科学之中,算法(Algorithm)为一个计算的具体步骤,常用于计算、数据处理和自动推理。精确而言,算法是一个表示为有限长列表的有效方法。算法应包含清晰定义的指令用于计算函数。 来自维基百科:
算法
少即是多?非参数语言模型,68页ppt
专知会员服务
23+阅读 · 2020年11月22日
【2020干货书】Python监督学习,387页pdf,使用Python的概念和实践
专知会员服务
71+阅读 · 2020年10月11日
【干货书】用Python构建概率图模型,173页pdf
专知会员服务
111+阅读 · 2020年8月23日
【2020新书】如何编写出牛叉的代码来?Write Great Code第二版,472页pdf
专知会员服务
67+阅读 · 2020年8月17日
基于改进卷积神经网络的短文本分类模型
专知会员服务
25+阅读 · 2020年7月22日
最新必读的六篇「知识图谱表示学习KGRL」2020顶会论文和代码
专知会员服务
66+阅读 · 2020年7月17日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
63+阅读 · 2020年3月26日
【WWW2020-中科大】LightRec:一个内存和搜索高效率的推荐系统
专知会员服务
48+阅读 · 2020年3月23日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
180+阅读 · 2020年1月1日
谷歌开源新模型EfficientNet:图像识别效率提升10倍,参数减少88%
AI前线
15+阅读 · 2019年6月9日
一文了解采样方法
AI100
5+阅读 · 2018年7月6日
机器学习者都应该知道的五种损失函数!
数盟
5+阅读 · 2018年6月21日
数据科学家需要了解的5种聚类算法
论智
4+阅读 · 2018年4月7日
教你用Python进行自然语言处理(附代码)
数据派THU
6+阅读 · 2018年3月28日
免费|机器学习算法Python实现
全球人工智能
5+阅读 · 2018年1月2日
干货|掌握机器学习数学基础之优化[1](重点知识)
机器学习研究会
10+阅读 · 2017年11月19日
10分钟搞懂Tensorflow 逻辑回归实现手写识别
全球人工智能
5+阅读 · 2017年10月19日
机器学习(7)之感知机python实现
机器学习算法与Python学习
4+阅读 · 2017年7月23日
代码这样写不止于优雅(Python版)
数说工作室
4+阅读 · 2017年7月17日
A Rely-Guarantee Specification of Mixed-Criticality Scheduling
Arxiv
0+阅读 · 2020年12月2日
Heterogeneous Explore-Exploit Strategies on Multi-Star Networks
Arxiv
0+阅读 · 2020年12月2日
Time-Independent Planning for Multiple Moving Agents
Arxiv
0+阅读 · 2020年11月29日
Speeding up decimal multiplication
Arxiv
0+阅读 · 2020年11月27日
Tight Hardness Results for Training Depth-2 ReLU Networks
Arxiv
0+阅读 · 2020年11月27日
Accurate Spectral Collocation Computation of High Order Eigenvalues for Singular Schrödinger Equations
Arxiv
0+阅读 · 2020年11月26日
LNEMLC: Label Network Embeddings for Multi-Label Classification
Arxiv
3+阅读 · 2019年1月1日
Dynamic Transfer Learning for Named Entity Recognition
Arxiv
3+阅读 · 2018年12月13日
Energy-Based Hindsight Experience Prioritization
Arxiv
3+阅读 · 2018年10月8日
Graph Convolutional Networks for Named Entity Recognition
Arxiv
17+阅读 · 2018年2月14日
VIP会员
自助开通(推荐)
客服开通
详情
相关主题
算法
软件开发
软件
操作
国际学习理论会议
相关VIP内容
少即是多?非参数语言模型,68页ppt
专知会员服务
23+阅读 · 2020年11月22日
【2020干货书】Python监督学习,387页pdf,使用Python的概念和实践
专知会员服务
71+阅读 · 2020年10月11日
【干货书】用Python构建概率图模型,173页pdf
专知会员服务
111+阅读 · 2020年8月23日
【2020新书】如何编写出牛叉的代码来?Write Great Code第二版,472页pdf
专知会员服务
67+阅读 · 2020年8月17日
基于改进卷积神经网络的短文本分类模型
专知会员服务
25+阅读 · 2020年7月22日
最新必读的六篇「知识图谱表示学习KGRL」2020顶会论文和代码
专知会员服务
66+阅读 · 2020年7月17日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
63+阅读 · 2020年3月26日
【WWW2020-中科大】LightRec:一个内存和搜索高效率的推荐系统
专知会员服务
48+阅读 · 2020年3月23日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
180+阅读 · 2020年1月1日
热门VIP内容
开通专知VIP会员 享更多权益服务
【AAAI2025】通过自适应多方面检索增强,利用大型语言模型进行知识图谱问答
中国信通院发布《人工智能风险治理报告(2024年)》
AAAI 2025 | 基于模态分词的细粒度实体表示学习框架
【哈佛大学博士论文】低质量数据的高风险决策:行星健康的人工智能决策制定
相关资讯
谷歌开源新模型EfficientNet:图像识别效率提升10倍,参数减少88%
AI前线
15+阅读 · 2019年6月9日
一文了解采样方法
AI100
5+阅读 · 2018年7月6日
机器学习者都应该知道的五种损失函数!
数盟
5+阅读 · 2018年6月21日
数据科学家需要了解的5种聚类算法
论智
4+阅读 · 2018年4月7日
教你用Python进行自然语言处理(附代码)
数据派THU
6+阅读 · 2018年3月28日
免费|机器学习算法Python实现
全球人工智能
5+阅读 · 2018年1月2日
干货|掌握机器学习数学基础之优化[1](重点知识)
机器学习研究会
10+阅读 · 2017年11月19日
10分钟搞懂Tensorflow 逻辑回归实现手写识别
全球人工智能
5+阅读 · 2017年10月19日
机器学习(7)之感知机python实现
机器学习算法与Python学习
4+阅读 · 2017年7月23日
代码这样写不止于优雅(Python版)
数说工作室
4+阅读 · 2017年7月17日
相关论文
A Rely-Guarantee Specification of Mixed-Criticality Scheduling
Arxiv
0+阅读 · 2020年12月2日
Heterogeneous Explore-Exploit Strategies on Multi-Star Networks
Arxiv
0+阅读 · 2020年12月2日
Time-Independent Planning for Multiple Moving Agents
Arxiv
0+阅读 · 2020年11月29日
Speeding up decimal multiplication
Arxiv
0+阅读 · 2020年11月27日
Tight Hardness Results for Training Depth-2 ReLU Networks
Arxiv
0+阅读 · 2020年11月27日
Accurate Spectral Collocation Computation of High Order Eigenvalues for Singular Schrödinger Equations
Arxiv
0+阅读 · 2020年11月26日
LNEMLC: Label Network Embeddings for Multi-Label Classification
Arxiv
3+阅读 · 2019年1月1日
Dynamic Transfer Learning for Named Entity Recognition
Arxiv
3+阅读 · 2018年12月13日
Energy-Based Hindsight Experience Prioritization
Arxiv
3+阅读 · 2018年10月8日
Graph Convolutional Networks for Named Entity Recognition
Arxiv
17+阅读 · 2018年2月14日
大家都在搜
自主可控
palantir
大规模语言模型
CMU博士论文
斯坦福博士论文
洛克菲勒
图解微积分
主题知识树
第一次工业革命
出海产品从 0 到 1 该怎么做
Top
提示
微信扫码
咨询专知VIP会员与技术项目合作
(加微信请备注: "专知")
微信扫码咨询专知VIP会员
Top