什么是时间复杂度和空间复杂度
先简要介绍一下:
算法复杂度分为时间复杂度和空间复杂度。其作用:时间复杂度是指执行这个算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。时间和空间(即寄存器)都是计算机资源的重要体现,而算法的复杂性就是体现在运行该算法时的计算机所需的资源多少。
时间复杂度:
1:算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好地反映出算法的优劣与否;
2:算法执行时间需要依据该算法编制的程序在计算机上执行运行时所消耗的时间来度量,度量方法有两种,事后统计方法和事前分析估算方法,因为事后统计方法更多的依赖计算机的硬件,软件等环境因素,有时容易掩盖算法本身的优劣。因此常常采用事前分析估算的方法;
3:一个算法是由控制结构(顺序,分支,循环三种)和原操作(固有数据类型的操作)构成的,而算法时间取决于两者的综合效率;
4:一个算法花费的时间与算法中语句的执行次数成正比,执行次数越多,花费的时间就越多。一个算法中的执行次数称为语句频度或时间频度。记为T(n);
5:在时间频度中,n称为问题的规模,当n不断变化时,它所呈现出来的规律,我们称之为时间复杂度(其实在这中间引入了一个辅助函数f(n),但它与t(n)是同数量级函数,我们且先这样理解。)
6:在各种算法中,若算法中的语句执行次数为一个常数,则时间复杂度为o(1);同时,若不同算法的时间频度不一样,但他们的时间复杂度却可能是一样的,eg:T(n)=n^2+2n+4 与 T(n)=4n^2+n+8,他们的时间频度显然不一样,但他们的时间复杂度却是一样的,均为O(n^2),时间复杂度只关注最高数量级,且与之系数也没有关系。
7: 求解算法的时间复杂度的具体步骤是:
⑴ 找出算法中的基本语句;
算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
⑵ 计算基本语句的执行次数的数量级;
只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。
⑶ 用大Ο记号表示算法的时间性能。
将基本语句执行次数的数量级放入大Ο记号中。
如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加
下面我来举一个简单例子:
for(i=1;i<=n;i++)
{a++};
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
a++;
}
}
第一个for循环的时间复杂度为o(n),第二个for循环时间复杂度为o(n^2),则整个算法的时间复杂度为o(n^2+n)。
o(1)表示基本语句的执行次数是一个常数,一般来说,只要算法中不存在循环语句,时间复杂度就为o(1)。
空间复杂度(Space Complexity):
1:空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度;
2:一个算法在计算机上占用的内存包括:程序代码所占用的空间,输入输出数据所占用的空间,辅助变量所占用的空间这三个方面,程序代码所占用的空间取决于算法本身的长短,输入输出数据所占用的空间取决于要解决的问题,是通过参数表调用函数传递而来,只有辅助变量是算法运行过程中临时占用的存储空间,与空间复杂度相关;
3:通常来说,只要算法不涉及到动态分配的空间,以及递归、栈所需的空间,空间复杂度通常为0(1);
4: 对于一个算法,其时间复杂度和空间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间;反之,求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。另外,算法的所有性能之间都存在着或多或少的相互影响。因此,当设计一个算法(特别是大型算法)时,要综合考虑算法的各项性能,算法的使用频率,算法处理的数据量的大小,算法描述语言的特性,算法运行的机器系统环境等各方面因素,才能够设计出比较好的算法。
什么是时间复杂度和空间复杂度相关推荐
- 数据结构(02)— 时间复杂度与空间复杂度转换
1. 时间复杂度转化为空间复杂度 常用的降低时间复杂度的方法有递归.二分法.排序算法.动态规划等,降低空间复杂度的核心思路就是,能用低复杂度的数据结构能解决问题,就千万不要用高复杂度的数据结构. ...
- a*算法的时间复杂度_算法基础——时间复杂度amp;空间复杂度
关注.星标公众号,学点计算机知识. 整理:persistenceBin 今天来跟大家继续分享一下数据结构的基础知识--算法效率的度量:时间复杂度和空间复杂度.首先来跟大家分享一下在电影<复仇者联 ...
- 时间复杂度与空间复杂度分析
作为开发人员,我们都希望在完成功能的基础上让代码运行的更快.更省空间,那如何衡量编写的代码是否更有效率,这就需要我们学会如何分析代码时间复杂度和空间复杂度. 什么是复杂度分析 执行时间和占用空间是代码 ...
- 时间复杂度和空间复杂度3 - 数据结构和算法05
时间复杂度和空间复杂度3 让编程改变世界 Change the world by program 函数调用的时间复杂度分析 如果我们把问题再实际化一点,大家是否能自己正确的分析出来呢? 我们来看下边这 ...
- python【数据结构与算法】一种时间复杂度和空间复杂度的计算方法
文章目录 1 算法的时间复杂度定义 2 推导大O阶方法 2.1 常数阶 2.2 线性阶 2.3 对数阶 2.4 平方阶 2.5 立方阶 3 常见的时间复杂度排序 4 算法空间复杂度 5 常用算法的时间 ...
- 常用的排序算法的时间复杂度和空间复杂度
常用的排序算法的时间复杂度和空间复杂度 1.时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出 ...
- 关于算法的时间复杂度和空间复杂度的总结
一.算法的概念 算法(Algorithm)是将一组输入转化为一组输出的一系列计算步骤,其中每个步骤必须能在有限时间内完成.算法是用来解决一类计算问题的,注意是一类问题,而不是一个特定的问题. 二. ...
- 【算法的时间复杂度和空间复杂度】-算法02
算法的时间复杂度和空间复杂度 一个算法的好坏我们主要从"时间"和"空间" 两个维度来衡量 时间维度:是指执行当前算法所消耗的时间,我们通常用 "时间复 ...
- 递归二分查找时间复杂度、空间复杂度和稳定性
递归 递归条件 自己调用自己 有结束条件 二分查找 二分查找对1~100乱序数字查找 l = list(range(1,101)) def bin_search(data_set,val):low = ...
- java 空间复杂度_时间复杂度和空间复杂度
原文首发于微信公众号:躬行之(jzman-blog) 时间复杂度和空间复杂度可以帮助我们根据具体的平台选择合适的算法,要学会以空间换时间或以时间换空间的设计思想,如在单片机等一般是内存空间比较紧张,在 ...
最新文章
- hung-yi lee_p13_反向传播
- 【超详细】手把手教你使用YOLOX进行物体检测(附数据集)
- #大学生活#锐捷客户端与VMWare
- 《LeetCode力扣练习》第4题 C语言版 (做出来就行,别问我效率。。。。)
- Mysql 共享锁(lock in share mode),排他锁(for update)
- 一致性哈希算法——算法解决的核心问题是当slot数发生变化时,能够尽量少的移动数据...
- python按行求和_Python第一篇:对3个Excel文件进行整合
- 代码是写给人看的,请C/C++过来的程序员们多学习软件工程
- Neo4j【付诸实践 01】SpringBoot集成报错org.neo4j.driver.exceptions.ClientException:服务器不支持此驱动程序支持的任何协议版本(解决+源代码)
- TortoiseSVN 不显示图标
- 图解TCPIP-IP 网际协议-IP地址(网络层)
- Java知识导航总图
- centos7安装mysql教程详解(含常见问题的解决方案)
- C语言员工信息管理系统
- 如何衡量一篇英语作文词汇丰富度?
- Unity Shader-Decal贴花(SelfDecal,Alpha Blend,Mesh Decal,Projector,Deferred Decal)
- 迅雷x下载的东西都变成php格式化,关于文件下载后变成PHP格式的解决办法
- git 怎么回退已经push的版本_Git版本回退
- [NOIP模拟][动态规划]permut
- 2021年全国大学生数据建模 C题 数学建模大赛
热门文章
- 预编译头.pch文件详解
- 借《鱿鱼游戏》带动Q3财报走出水逆,奈飞的王者回归并非意外
- Android:Content has been consumed
- git pull 报错:Exiting because of unfinished merge.
- 跟任何人都聊得来---最受世界500强企业欢迎的沟通课(一)
- openssl官网-下载安装过程
- BUUCTF--[0CTF 2016]piapiapia
- 遥感方向SCI期刊整理
- 《断舍离(工作篇)》-[日]山下英子
- 电大形考作业c语言答案,题目精编国家开放大学电大《管理信息系统》形考网络课作业1-4试题及答案...