最详细的解说—时间和空间复杂度德邦总管

一个算法语句总的执行次数是关于问题规模N的某个函数,记为f(N),N称为问题的规模。语句总的执行次数记为T(N),当N不断变化时,T(N)也在变化,算法执行次数的增长速率和f(N)的增长速率相同。

⑴找出算法中的基本语句

算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。

⑵计算基本语句的执行次数的数量级

只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。

下面举一个简单例子:

for(i=1;i<=n;i++)

{a++};

{

for(j=1;j<=n;j++)

a++;

}

3、忽略掉常数项

1.二分查找

2.斐波那契的递归算法

一个程序的空间复杂度是指运行完一个程序所需内存的大小,利用程序的空间复杂度,可以对程序的运行所需要的内存多少有个预先估计。一个程序执行时除了需要存储空间和存储本身所使用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为现实计算所需信息的辅助空间。程序执行时所需存储空间包括以下两部分。

(1)固定部分:这部分空间的大小与输入/输出的数据的个数多少、数值无关,主要包括指令空间(即代码空间)、数据空间(常量、简单变量)等所占的空间,这部分属于静态空间。

(2)可变空间:这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等,这部分的空间大小与算法有关。一个算法所需的存储空间用f(n)表示。S(n)=O(f(n)),其中n为问题的规模,S(n)表示空间复杂度。

1、空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。

3、通常来说,只要算法不涉及到动态分配的空间以及递归、栈所需的空间,空间复杂度通常为0(1)。

4、算法的空间复杂度并不是计算实际占用的空间,而是计算整个算法的辅助空间单元的个数,与问题的规模没有关系。

在斐波那契数求空间复杂度的过程中,我们需要考虑函数栈帧的过程,比如当我们求第五个斐波那契数的时候,这时候需要先开辟空间存放第四个数,然后再开辟空间存放第三个数;当开辟空间到第二个和第一个数的时候,第三个数得到结果并返回到第四个数中,第四个数的值已知后返回到第五个数中,在这个过程中,最大占用空间即为层数减一。如下图所示:

开辟空间的大小最多等于层数+1,也就是说求第N个斐波那契数,空间复杂度即为O(N)。

二分查找因为整个运算过程没有空间的改变,所以空间复杂度为O(1)。

非递归:

templateT*BinarySearch(T*array,intnumber,constT&data)

assert(number>=0);

intleft=0;

intright=number-1;

while(right>=left)

intmid=(left&right)+((left^right)>>1);

if(array[mid]>data)

right=mid-1;

elseif(array[mid]

left=mid+1;

else

return(array+mid);

returnNULL;

分析:

由于辅助空间是常数级别的,所以,空间复杂度是O(1)。

递归:

templateT*BinarySearch(T*left,T*right,constT&data)

assert(left);

assert(right);

if(right>=left)

T*mid=left+(right-left)/2;

if(*mid==data)

returnmid;

return*mid>dataBinarySearch(left,mid-1,data):BinarySearch(mid+1,right,data);

递归的次数和深度都是log2N,每次所需要的辅助空间都是常数级别的:

空间复杂度:O(log2N)

//递归情况下的斐波那契数列

longlongFib(intn)

assert(n>=0);

returnn<2n:Fib(n-1)+Fib(n-2);

递归的空间复杂度是:递归的深度*每次递归所需的辅助空间的个数,所以,空间复杂度是:O(N)。

THE END
1.朱娜斐编译原理复习笔记北京工业大学软件学院说明 笔记大部分内容来自 参考资料[1], 看了B站上中科大华保健老师的编译原理课视频( 参考资料[2]),补充完善了DFA的代码表示、Hopcroft 算法、文法重写、LL(1)算法、LR算法等内容 有许多知识是结合了自己的理解进行整理,所以可能会有错误之处 再往后因为时间问题就有点烂尾了 https://www.jianshu.com/p/f25c1315af34
2.人工智能技术基础系列之:知识图谱51CTO博客核心算法原理和具体操作步骤以及数学模型公式详细讲解 具体代码实例和详细解释说明 未来发展趋势与挑战 附录常见问题与解答 1.1 知识图谱的应用场景 知识图谱技术在人工智能领域具有广泛的应用,主要包括以下几个方面: 语义搜索:知识图谱可以帮助搜索引擎更好地理解用户的查询意图,并提供更相关的搜索结果。例如,当用户搜索“https://blog.51cto.com/universsky/8996522
3.算法是什么?初学者必看!,教育,高等教育,好看视频算法是什么?初学者必看! 百度文库 53万粉丝 · 76万个视频百度文库官方账号 关注 接下来播放自动播放 01:05 冉莹颖11岁儿子身高只有136 十二不惑 13万次播放 · 452次点赞 01:06 61岁钱小豪自曝健康状况,否认患癌以及糖尿病,透露暴瘦40磅原因 星知道STAR 5.3万次播放 · 122次点赞 12:02 战火连天:女土匪https://haokan.baidu.com/v?pd=wisenatural&vid=6851353270577964344
4.软件工程之软件设计③(概要设计说明书,详细设计说明书)总体设计(概要设计)侧重点在于整体的把控,即整个软件中模块的组成以及各个模块的调用关系。通过结构化设计方法(SD方法)来进行描述,让使用者可以很清晰的看到概要设计人员想要表达的内容,最后形成的文档是概要设计说明书。 详细设计则是侧重于每个独立模块中的数据结构,算法,接口,测试的设计,通过各种软件开发工具辅助来完https://cloud.tencent.com/developer/article/2081756
5.《100以内的加法和减法》教案学生在一年级学会了两位数加一位数和两位数加整十数的口算,为学生理解两位数不进位加法笔算的的算理和算法做好了准备,利用知识的迁移,通过学具的操作,经历活动的探究,体验成功的快乐。 教学重点:掌握两位数不进位加法的笔算方法并能正确计算。 教学难点:理解相同数位上的数才能相加的道理。 https://www.wenshubang.com/jiaoan/2980367.html
6.万字干货!15个著名的设计心理学原理和应用深度解析!0 无需说明书 乔布斯曾说过:“苹果应该创造所有人都可以使用的产品,即使没有用户指南”。 1 一看就会 简单易懂,看一眼就明白你想说什么,不用教学就知道怎么用。 2 秒法则 所谓“2 秒法则”,是指用户在使用某类系统时的等待时长不超过 2 秒。在极短的时间内展示重要信息,给用户留下深刻的第一印象。这里的https://www.uisdc.com/15-principles-of-psychology/
7.自动搜索算法(带源码和详细说明)资源Ransac算法说明及源代码,并包含使用实例。改代码书写严谨,并有详细的使用说明。 基于Matlab实现A星算法源码+项目说明+超详细注释.zip 浏览:14 5星 · 资源好评率100% 【资源说明】 基于Matlab实现A星算法源码+项目说明+超详细注释.zip 算法介绍 A*算法最初发表于1968年,由Stanford研究院的Peter Hart, Nils Nilssohttps://download.csdn.net/download/weixin_39247141/10609301
8.小米运动手表Color使用说明小米运动手表Color评测而且针对运动场景,小米手表Color运动版内置了12nm制程工艺的高端四模定位芯片,支持GPS、GLONASS、GAlileo、北斗四大全球卫星定位系统,搭配定制里程优化算法,可进一步提升运动轨迹和里程精度,更准确的记录运动数据。比如我实际测试键走,围着小区走一圈,轨迹记录的非常精准,户外定位也很快。日常计步,实测200步走下来,竟然一步https://post.smzdm.com/ju/ad4xq04/
9.河南省济源第一中学河南省济源第一中学始建于1926年,是“全国文明校园”“河南省示范性普通高中”“河南省普通高中多样化发展示范校”。https://www.hnjyyz.com/
10.这是一份通俗易懂的知识图谱技术与应用指南机器之心首先需要说明的一点是,有可能不少人认为搭建一个知识图谱系统的重点在于算法和开发。但事实并不是想象中的那样,其实最重要的核心在于对业务的理解以及对知识图谱本身的设计,这就类似于对于一个业务系统,数据库表的设计尤其关键,而且这种设计绝对离不开对业务的深入理解以及对未来业务场景变化的预估。 当然,在这里我们https://www.jiqizhixin.com/articles/2018-06-20-4
11.ADMM算法的详细推导过程是什么?具体证明其实没什么技术难度,顶多就是algebra稍微有点绕。这也是ADMM算法分析的一般特点,我们这还是最https://www.zhihu.com/question/309568920/answer/580226096