数据结构 算法的时间复杂度与空间复杂度的计算(带有例题讲解)
时间复杂度
- 对于算法时间复杂度的分析需要牢记一句话:将算法中基本操作的执行次数作为算法时间复杂度的度量。时间复杂度并不是执行完一段程序的总时间,而是其中基本操作的总次数。
- 在考试的算法题目中你总能找到一个n,称为问题的规模。如你要处理的数组元素的个数为n,而基本操作所执行的次数是n的一个函数f(n)。对于求其基本操作执行的次数,就是求f(n)。求出以后就可以取出f(n)中随n增大而增大的最快的项,将其系数变为1,作为时间复杂度的度量。
计算时间复杂度的步骤
- 确定算法中的基本操作以及问题的规模
- 根据基本操作执行情况计算出规模n的函数f(n),并确定时间复杂度T(n)=O(f(n)中增长最快的项/此项的系数)
- 注意:一般将最坏的情况作为算法时间复杂度的度量
例子1:
void fun(int n)
{ int i = 1, j =100;while(i<n){++j;i+=2;}
}
解析:
1.找出基本操作。
显然++j;i+=2;都是基本操作
2.确定规模
确定n之后,可以看出循环是否结束和i有关,设循环m次后结束循环,此时i>n我们可得i最后的值为1+2m我们设1+2m+K=n(因为1+2m>n,所以加
一个常数K来使他们想等从而求得m与n的关系,K是常数并不影响最终时间复杂度)得m=(n-1-K)/2,即f(n)=(n-1-K)/2,其中增长最快的就是
n/2,所以时间复杂度T(n)=O(n).
例子2:
void fun(int n)
{int i,j,x=0;for(i=0;i<n;++i){for(j=i+1;j<n;++j){++x;}}
}
解析:
1.找出基本操作
++x:处于最内层的循环,所以取++x;为基本操作。
2.确定规模
显然n为规模。
下面列举i,j不同值情况下++x的执行次数
i j ++x
0 1 n-1
1 2 n-2
...........
n-1 n 0
利用等差数列求和的公式求出基本操作的执行次数:n(n-1)/2
变化最快的项为n^2/2,因此时间复杂度为T(n) = O(n^2)
例子3:
void funn(int n)
{int i=0,s=0;while(s<n){++i;s+=i;}
}
1.找出基本操作
++i和s+=i;都为基本操作
2.确定规模
显然n为规模
设执行m次循环后结束,s1=1, s2=1+2, s3=1+2+3, ..., sm=m(m+1)/2(等差数列求和公式)
求得m与n的关系,然后找出最高项将其系数变为1,得到T(n)=O(根号n)
空间复杂度
一个程序的空间复杂度是指运行完一个程序所需内存的大小。利用程序的空间复杂度,可以对程序的运行所需要的内存多少有个预先估计。一个程序执行时除了需要存储空间和存储本身所使用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为现实计算所需信息的辅助空间。程序执行时所需存储空间包括以下两部分。
(1)固定部分。这部分空间的大小与输入/输出的数据的个数多少、数值无关。主要包括指令空间(即代码空间)、数据空间(常量、简单变量)等所占的空间。这部分属于静态空间。
(2)可变空间,这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等。这部分的空间大小与算法有关。
一个算法所需的存储空间用f(n)表示。S(n)=O(f(n)) 其中n为问题的规模,S(n)表示空间复杂度。
- 设计算法时,时间复杂度要比空间复杂度更容易出问题,所以一般情况一下我们只对时间复杂度进行研究。一般面试或者工作的时候没有特别说明的话,复杂度就是指时间复杂度。
数据结构 算法的时间复杂度与空间复杂度的计算(带有例题讲解)相关推荐
- 史上最强数据结构----算法的时间复杂度和空间复杂度
第二章 算法的时间复杂度和空间复杂度 1.算法效率 2 时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.3 时间复杂度的计算举例 2.3.1 实例1 2.3.2 实例2 2.3.3 ...
- 时间复杂度和空间复杂度及多道例题讲解
为什么会有复杂度这个概念呢?原因是算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 .因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度. 时间复杂 ...
- 【数据结构入门】算法的时间复杂度和空间复杂度详解
文章目录 (1)算法效率 (2)时间复杂度的计算 1)什么是时间复杂度 2)大O渐进表示法(估算) 3)时间复杂度计算实例 4)总结 5)一些思考 (3)空间复杂度的计算 (4)常见复杂度对比 本篇前 ...
- 【数据结构与算法 10】算法的时间复杂度和空间复杂度
最近在研究数据结构与算法,在B站中找到了小甲鱼的<数据结构与算法课程>,挺有意思的! 尚硅谷Java数据结构与java算法,韩顺平数据结构与算法 对于一个算法来说,分析有两步,第一是从数学 ...
- java中怎么计算算法的时间复杂度_算法的时间复杂度和空间复杂度计算
一.算法的时间复杂度定义 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级.算法的时间复杂度,也就是算法的时间量度.记作:T(n) ...
- LeetCode0:学习算法必备知识:时间复杂度与空间复杂度的计算
算法(Algorithm)是指用来操作数据.解决程序问题的一组方法.算法是大厂.外企面试的必备项,也是每个高级程序员的必备技能.针对同一问题,可以有很多种算法来解决,但不同的算法在效率和占用存储空间上 ...
- 计算算法的时间复杂度和空间复杂度
算法的时间复杂度和空间复杂度-总结 通常,对于一个给定的算法,我们要做 两项分析.第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式.数学归纳法等.而在证明算法 ...
- 关于算法的时间复杂度和空间复杂度的总结
一.算法的概念 算法(Algorithm)是将一组输入转化为一组输出的一系列计算步骤,其中每个步骤必须能在有限时间内完成.算法是用来解决一类计算问题的,注意是一类问题,而不是一个特定的问题. 二. ...
- 【算法的时间复杂度和空间复杂度】-算法02
算法的时间复杂度和空间复杂度 一个算法的好坏我们主要从"时间"和"空间" 两个维度来衡量 时间维度:是指执行当前算法所消耗的时间,我们通常用 "时间复 ...
最新文章
- 开机f8修复电脑步骤_电脑维修实战,修复电脑开机的各种报错提示,看了不后悔...
- JpaSpecificationExecutor
- php中定义css样式的好处,CSS的优点和缺点分别是什么
- 卷积神经网络(CNN)及其实践
- leetcode(二)—— Add Two Numbers(Python/C++)
- c语言编写面向对象的类
- 软考必备资料大放送,全科目软考资料都给你备好了!
- 【STM32F429】第7章 ThreadX GUIX移植到STM32F429(MDK AC5)
- Sequencer和Sequence
- 掌握PPT制作高手的3大秘诀,从此熬夜加班是路人!
- 惠普笔记本通过系统如何进入BIOS?
- sublime text 编译时提示[WinError 2] 系统找不到指定的文件。
- python中的break、continue和pass
- 电视机尺寸与观看距离
- python-绘制散点图
- 计算机网络延展-桥接器(网桥)
- 深入理解计算机系统-之-数值存储(二)--C程序打印变量的每一字节或者位
- 常见客户SEO问题解答:网站关键词优化到底怎么做?
- P型硅与N型硅的区别
- python 卷积神经网络 应用_卷积神经网络概述及python实现