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

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

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递归树

目录
相关文章
|
2月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
131 6
|
2月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
334 0
|
3月前
|
机器学习/深度学习 数据采集 传感器
具有多种最大功率点跟踪(MPPT)方法的光伏发电系统(P&O-增量法-人工神经网络-模糊逻辑控制-粒子群优化)之使用粒子群算法的最大功率点追踪(MPPT)(Simulink仿真实现)
具有多种最大功率点跟踪(MPPT)方法的光伏发电系统(P&O-增量法-人工神经网络-模糊逻辑控制-粒子群优化)之使用粒子群算法的最大功率点追踪(MPPT)(Simulink仿真实现)
313 0
|
1月前
|
机器学习/深度学习 数据采集 负载均衡
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
127 0
|
1月前
|
机器学习/深度学习 算法 物联网
基于遗传方法的动态多目标优化算法
基于遗传方法的动态多目标优化算法
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
1154 6
|
7月前
|
机器学习/深度学习 存储 算法
18个常用的强化学习算法整理:从基础方法到高级模型的理论技术与代码实现
本文系统讲解从基本强化学习方法到高级技术(如PPO、A3C、PlaNet等)的实现原理与编码过程,旨在通过理论结合代码的方式,构建对强化学习算法的全面理解。
1938 10
18个常用的强化学习算法整理:从基础方法到高级模型的理论技术与代码实现
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
236 3
|
10月前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
1865 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
存储 算法 安全
SnowflakeIdGenerator-雪花算法id生成方法
SnowflakeIdGenerator-雪花算法id生成方法
413 1