首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

02-空间复杂度、递归

本文链接:https://blog.csdn.net/weixin_43908900/article/details/102537371 一:空间复杂度:用来评估算法内存占用大小的问题 空间复杂度的表示方式...: 使用了几个变量:O(1); 使用了长度为n的一位列表:O(n); 使用了m/n行n列的二位列表:O(mn)/O(n**2); 公司一般采取的策略是“空间换时间”===》怎么内存大小来降低网页或者应用的打开时间...二:递归: 递归的特点:1). 调用自身 2). 结束条件 #当我们输入3的时候,一下代码的打印结果是什么?...由上图可知:func1函数打印出来的是3、2、1;func2函数打印出来的是1、2、3(其中比较大的空白是递归)。...三:汉诺塔介绍及问题 汉诺塔的递归问题: def hanio(n,a,b,c): if n > 0: hanio(n-1,a,c,b) print("moving

41610

空间复杂度

什么是空间复杂度 空间复杂度是指执行算法时所使用的临时变量所占用内存空间的大小,同时间复杂度一样用大写的字母O(数量)来表示。...为什么使用空间复杂度 用于判断算法的优劣(算法在时间复杂度相同的情况下,空间复杂度越小的越好) 常见的空间复杂度种类 常数空间:算法所占用的空间是固定的,与输入输出无关,记为S(n) = O(1)。...线性空间:算法所占用的空间与输入输出成正比,记为S(n) = O(n)。 二维空间:算法所分配的是一个集合长度和宽度都与输入规模成正比的二维数组,记为S(n) = O(n²)。...递归空间:算法使用递归时,内存会分配一个方法调用栈,和递归深度成正比,与线性空间的空间复杂度相同,记为S(n) = O(n)。

43110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    递归算法的时间复杂度

    ,第一层的遍历时间复杂度是n,第二层遍历的时间复杂度是n,内层的时间复杂度是O(n^2),再加上递归,最后的时间复杂度是O(2^n*n^2),这个算法可见很粗糙,假如递归深度到是100,最后执行效率简直会让人头皮发麻...第一层遍历时间复杂度是O(n),加上递归,最后的时间复杂度是O(2^n*n),不算太理想,最起码比第一次好点。 再看看一个面试的常见的题目,斐波拉契数列,n=1,1,3,5,8,13......(n-2) 这个算法的时间复杂度是O(2^n),关于时间复杂度具体看调用次数便能明白。...递归算法的优化大概就是避免重复运算,将中金状态保存起来,以便下次使用,从结构上来看,是将时间复杂度转换为空间复杂度来解决。...递归算法的效率其实是非常低的,能不用递归就尽量不用递归;当然了也要具体问题具体对待,比如说开始提到我做的项目遇到的问题,不用递归我还真想不出其他更好的方式解决。 作者:杨轶 来源:宜信技术学院

    2.2K20

    空间复杂度

    空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。 空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法。...,一共创建了三个变量,end,exchange,i,使用了常数个额外空间,所以空间复杂度为 O(1) 注:空间复杂度算的是变量的个数 实例2: // 计算Fibonacci的空间复杂度?...,空间复杂度为 O(N) 实例3: // 计算阶乘递归Fac的空间复杂度?...long long Fac(size_t N) { if(N == 0) return 1; return Fac(N-1)*N; } 分析: 递归调用了N次,开辟了N个栈帧,每个栈帧使用了常数个空间...空间复杂度为O(N) 三、常见复杂度对比  常见的空间复杂度有:O(1) ,O(N),O(N^2) 总结 尽管现代计算机的存储容量已经很高,使得在大多数情况下,算法的空间复杂度不再是绝对的限制因素

    10700

    算法的时间复杂度和空间复杂度

    因此 衡量一个算法的好坏,一般 是从时间和空间两个维度来衡量的 ,即时间复杂度和空间复杂度。...时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间 。在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。...(建议画图递归栈帧的二叉树讲解) 3.空间复杂度 空间复杂度也是一个数学表达式,是对一个算法在运行过程中 临时占用存储空间大小的量度  空间复杂度不是程序占用了多少 bytes...的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。...实例 3 递归调用了 N 次,开辟了 N 个栈帧,每个栈帧使用了常数个空间。空间复杂度为 O(N) 4. 常见复杂度对比 一般算法常见的复杂度如下: 5.

    11610

    算法的时间复杂度与空间复杂度

    空间复杂度:就是说执行当前算法需要消耗的存储空间大小,也是越少越好。本来计算机的存储资源就是有限的,如果你的算法总是需要耗费很大的存储空间,这样也会给机器带来很大的负担。...三、空间复杂度计算 空间复杂度 O(1) 如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1)。...n,后面虽然有循环,但没有再分配新的空间,因此,这段代码的空间复杂度主要看第一行即可,即 S(n) = O(n)。...四、总结 评价一个算法的效率主要是看它的时间复杂度和空间复杂度情况。...可能有的开发者接触时间复杂度和空间复杂度的优化不太多(尤其是客户端),但在服务端的应用是比较广泛的,在巨大并发量的情况下,小部分时间复杂度或空间复杂度上的优化都能带来巨大的性能提升,是非常有必要了解的。

    1.6K10

    时间复杂度与空间复杂度

    那么我们应该如何去衡量不同算法之间的优劣呢? 主要还是从算法所占用的「时间」和「空间」两个维度去考量。 时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。...空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。 因此,评价一个算法的效率主要是看它的时间复杂度和空间复杂度情况。...nlog2n 线性对数阶 快速排序 n^2 平方阶 两重循环 n^3 立方阶 三重循环 2^n 指数阶 递归求斐波那契数列 n!...立方阶 O(n^3) 3次n循环 7. k 次方阶 O(n^k) k次n循环 3 空间复杂度 类似于时间复杂度的讨论,一个算法的空间复杂度(Space Complexity)定义为该算法所耗费的存储空间...空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度。

    89830

    漫谈时间复杂度空间复杂度

    O(N**N);第二种是空间复杂度为O(1)。...复杂度,有多复杂。。。我们生来就是为了和各种复杂度作斗争,太简单的没挑战,太复杂的玩不动。。。所以简单就是美,能将复杂的东西进行简单化,也是相当不错的。 花了几个小时,沉迷到理论之中。。。...空间复杂度,就是运行一次的过程中,占用的存储空间的大小度量,例如在进行一个list操作的时候,那么空间复杂度为O(1),当在进行修改删除操作的时候,可能需要新建一个新的存储空间来存储新的队列,从而空间复杂度为...空间复杂度和时间复杂度,可以作为选择数据类型的评判标准之一。...对于一种数据结构来说,有各种各样的时间复杂度,对于python的list实现,当你查询一个元素的时候,时间复杂度是O(1),常量时间;但是当你进行加入元素,删除元素的时候,时间复杂度是O(N),对于特例在尾部增加和删除的操作来说

    74630

    时间复杂度和空间复杂度

    2 空间复杂度 01 定义 空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。...比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。...(2) 可变空间,这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等。这部分的空间大小与算法有关。   一个算法所需的存储空间用f(n)表示。...S(n)=O(f(n)) 其中n为问题的规模,S(n)表示空间复杂度,f(n)为语句关于n所占存储空间的函数。...若算法执行时所需的辅助空间相对于输入数据量而言是个常数,则称此算法为原地工作,空间复杂度为0(1)。 通常, 我们都使用"时间复杂度"来指运行时间的需求,使用"空间复杂度"指空间需求。

    1.1K60

    分析递归函数的时间复杂度

    递归算法的时间复杂度表达式: O(T) = R * O(s) O(T)表示时间复杂度 R表示递归调用的次数 O(s)每次递归调用计算的时间复杂度 想想斐波那契函数,它的递归关系是f(n)...所以,我们可以估算出f(n)的时间复杂度就是O(2n) 备忘录 备忘录技术是用来优化递归算法时间复杂度的技术。...通过缓存和重用中间结果的方式,备忘录可以极大地减少递归调用的次数,也就是减少执行树中分枝的数量。所以,当我们使用备忘录来分析递归算法的时间复杂度时候应该把这减少的部分考虑到。...结果就是,计算f(n)递归将调用n-1次,以计算它所依赖的所有先前的数。 现在我们就可以利用文章开头列出的公式来计算备忘录技术应用后的时间复杂度:O(1)n=O(n)。...结论 备忘录不仅优化算法的时间复杂度,而且还可以简化时间复杂度的计算。 希望能给大家带来一定的帮助谢谢。

    71250

    算法的时间复杂度与空间复杂度

    【C语言】时间复杂度与空间复杂度 算法的效率 时间复杂度 空间复杂度 算法的效率 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。...因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。...时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。 时间复杂度 时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。...空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。 空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法。...1的相等,以此类推,这段代码的空间复杂度为O(N).

    1.1K00

    递归算法的时间复杂度分析

    转自地址 http://blog.csdn.net/metasearch/article/details/4428865 在算法分析中,当一个算法中包含递归调用时,其时间复杂度的分析会转化为一个递归方程求解...实际上,这个问题是数学上求解渐近阶的问题,而递归方程的形式多种多样,其求解方法也是不一而足,比较常用的有以下四种方法: (1)代入法(Substitution Method) 代入法的基本步骤是先推测递归方程的显式解...(2)迭代法(Iteration Method) 迭代法的基本步骤是迭代地展开递归方程的右端,使之成为一个非递归的和式,然后通过对和式的估计来达到对方程左端即方程的解的估计。...这种递归方程是分治法的时间复杂性所满足的递归关系,即一个规模为n的问题被分成规模均为n/b的a个子问题,递归地求解这a个子 问题,然后通过对这a个子间题的解的综合,得到原问题的解。...这里涉及的三类情况,都是拿f(n)与nlogb a 作比较,而递归方程解的渐近阶由这两个函数中的较大者决定。

    1.9K50

    时间复杂度与空间复杂度

    我么可以用算法的空间复杂度来描述算法对内存的占用。...算法的空间复杂度计算公式记作:S(n)=O(f(n)),其中n为输入规模,f(n)为语句关于n所占存储空间的函数。 案例: 对指定的数组元素进行反转,并返回反转的内容。...,我们得出的内存占用情况如下: 算法一: 不管传入的数组大小为多少,始终额外申请4+4=8个字节; 算法二: 4+4n+24=4n+28; 根据大O推导法则,算法一的空间复杂度为O(1),算法二的空间复杂度为...O(n),所以从空间占用的角度讲,算法一要优于算法二。...但是,如果你做的程序是嵌入式开发,尤其是一些传感器设备上的内置程序,由于这些设备的内存很小,一般为几kb,这个时候对算法的空间复杂度就有要求了,但是一般做java开发的,基本上都是服务器开发,一般不存在这样的问题

    61820

    递归的时间复杂度(Master 公式)

    我们在解决算法问题时,经常会用到递归。递归在较难理解的同时,其算法的复杂度也不是很方便计算。而为了较为简便地评估递归的算法复杂度,Master公式。...Master公式含义T(N):表示当输入规模为 N 时,算法所需的时间复杂度。N 通常代表问题的规模,比如数据的数量、数组的长度、图的顶点数等。a:表示子问题的数量。...在分治算法中,a 常常代表每次递归调用产生的子问题数量。例如,在归并排序中,a 的值为 2,因为每次递归调用会将问题分为两个子问题。T(N/b):表示每个子问题的时间复杂度。...b 是问题规模减小的因子,即每次递归调用时,问题规模都会减少到原来的 1/b。例如,在归并排序中,每次递归调用都会处理数组的一半,所以 b 的值为 2。...O(N^d):表示除了递归调用之外,算法在每次递归步骤中所做的额外工作的时间复杂度。O(N^d) 是除了递归调用之外的时间开销的上界。d 是一个常数,表示额外工作的时间复杂度与 N 的关系。

    19210
    领券