秒懂算法 | 递推方程求解方法

简介: 时间复杂度和空间复杂度表示为递推方程的两种求解方法。

640.jpg

01、迭代法

迭代法就是迭代的方式展开方程的右边,直到没有可以迭代的项为止,这时通过对右边的和进行估算来估计方程的解。

下面给出一个用迭代法求解的例子。
【例1】汉诺塔问题

3根圆柱a、b、c,其中a上面串了n个圆盘。这些圆盘从上到下是按从小到大顺序排列的,大的圆盘任何时刻不得位于小的圆盘上面。每次移动一个圆盘,最终将所有圆盘移动到c上,该如何移动?

该问题的算法描述如下:

640.png


参数n代表问题的规模,耗时用T(n)表示,规模为n-1时的耗时为T(n-1)。当规模为1时,只需要移动一步即可,耗时为O(1)。当规模大于1时,先将n-1个圆盘移动到b,耗时T(n-1);然后将剩下的1个圆盘移动到c,耗时O(1);最后将n-1个圆盘移动到c,耗时T(n-1)。故汉诺塔问题的时间复杂度递推方程如下:

640.png


令c=O(1),用迭代法求解过程如下:

640.png


故算法hanoi的时间复杂度为O(2n)。

02、递归树

递归树是迭代过程的一种图像表述,常被用于求解递推方程,它的求解表示比一般的迭代会更加的简洁与清晰。

递归树是迭代计算的模型,它的生成过程与迭代过程一致,递归树上所有项恰好是迭代之后产生和式中的项,对递归树上的项求和就是迭代后方程的解。不妨设递推方程的一般形式为:

640.png


其中,n为原问题的规模;mk(k=1,2,…,i)为划分的子问题的规模;f(n)表示分解子问题和归并子问题的解为原问题的解所消耗的总时间。
递归树生成规则如下:

(1) 初始时递归树只有根节点T(n);

(2) 将递归项叶节点的迭代式T(n)表示成二层子树,父节点为递归前分解子问题和递归后归并子问题的解消耗的时间f(n),子节点为子问题的递归项T(mi),i=1,2,…,i。该操作一直持续到无递归项为止。
【例2】根据二分查找算法的时间复杂度递推方程,用递归树求解二分查找的时间复杂度。

640.png


解:第一步,递归树中只有T(n),如图2所示。

第二步,将递归项T(n)表示成两层子树,用两层子树代替T(n),令c=O(1),如图3所示。
640.png
■ 图2根节点 ■ 图3两层子树代替根节点

第三步,将递归项T(n/2)表示成两层子树,用两层子树代替T(n/2),如图4所示。

以此类推,直到没有递归项为止,如图5所示。

二分查找算法的时间复杂度为clog2n,即O(log2n)。

640.png


■ 图4两层子树代替T(n/2) ■ 图5递归树

目录
相关文章
|
27天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
88 4
|
2月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
54 3
|
25天前
|
存储 算法 安全
SnowflakeIdGenerator-雪花算法id生成方法
SnowflakeIdGenerator-雪花算法id生成方法
22 1
|
6月前
|
数据采集 机器学习/深度学习 算法
机器学习方法之决策树算法
决策树算法是一种常用的机器学习方法,可以应用于分类和回归任务。通过递归地将数据集划分为更小的子集,从而形成一棵树状的结构模型。每个内部节点代表一个特征的判断,每个分支代表这个特征的某个取值或范围,每个叶节点则表示预测结果。
182 1
|
29天前
|
JSON 算法 数据挖掘
基于图论算法有向图PageRank与无向图Louvain算法构建指令的方式方法 用于支撑qwen agent中的统计相关组件
利用图序列进行数据解读,主要包括节点序列分析、边序列分析以及结合节点和边序列的综合分析。节点序列分析涉及节点度分析(如入度、出度、度中心性)、节点属性分析(如品牌、价格等属性的分布与聚类)、节点标签分析(如不同标签的分布及标签间的关联)。边序列分析则关注边的权重分析(如关联强度)、边的类型分析(如管理、协作等关系)及路径分析(如最短路径计算)。结合节点和边序列的分析,如子图挖掘和图的动态分析,可以帮助深入理解图的结构和功能。例如,通过子图挖掘可以发现具有特定结构的子图,而图的动态分析则能揭示图随时间的变化趋势。这些分析方法结合使用,能够从多个角度全面解读图谱数据,为决策提供有力支持。
|
2月前
|
算法 索引
HashMap扩容时的rehash方法中(e.hash & oldCap) == 0算法推导
HashMap在扩容时,会创建一个新数组,并将旧数组中的数据迁移过去。通过(e.hash & oldCap)是否等于0,数据被巧妙地分为两类:一类保持原有索引位置,另一类索引位置增加旧数组长度。此过程确保了数据均匀分布,提高了查询效率。
46 2
|
2月前
|
搜索推荐 Shell
解析排序算法:十大排序方法的工作原理与性能比较
解析排序算法:十大排序方法的工作原理与性能比较
78 9
|
2月前
|
存储 算法 Java
数据结构与算法学习八:前缀(波兰)表达式、中缀表达式、后缀(逆波兰)表达式的学习,中缀转后缀的两个方法,逆波兰计算器的实现
前缀(波兰)表达式、中缀表达式和后缀(逆波兰)表达式的基本概念、计算机求值方法,以及如何将中缀表达式转换为后缀表达式,并提供了相应的Java代码实现和测试结果。
126 0
数据结构与算法学习八:前缀(波兰)表达式、中缀表达式、后缀(逆波兰)表达式的学习,中缀转后缀的两个方法,逆波兰计算器的实现
|
2月前
|
算法
基于最小二乘递推算法的系统参数辨识matlab仿真
该程序基于最小二乘递推(RLS)算法实现系统参数辨识,对参数a1、b1、a2、b2进行估计并计算误差及收敛曲线,对比不同信噪比下的估计误差。在MATLAB 2022a环境下运行,结果显示了四组误差曲线。RLS算法适用于实时、连续数据流中的动态参数辨识,通过递推方式快速调整参数估计,保持较低计算复杂度。
|
2月前
|
机器学习/深度学习 人工智能 开发框架
【AI系统】AI 学习方法与算法现状
在人工智能的历史长河中,我们见证了从规则驱动系统到现代机器学习模型的转变。AI的学习方法基于深度神经网络,通过前向传播、反向传播和梯度更新不断优化权重,实现从训练到推理的过程。当前,AI算法如CNN、RNN、GNN和GAN等在各自领域取得突破,推动技术进步的同时也带来了更大的挑战,要求算法工程师与系统设计师紧密合作,共同拓展AI技术的边界。
121 1