当前位置: 首页 > news >正文

[算法设计与分析-从入门到入土] 递归

[算法设计与分析-从入门到入土] 递归

知乎:https://www.zhihu.com/people/byzh_rc

CSDN:https://blog.csdn.net/qq_54636039

注:本文仅对所述内容做了框架性引导,具体细节可查询其余相关资料or源码

参考文章:各方资料

文章目录

  • [算法设计与分析-从入门到入土] 递归
  • 递归recursion
  • 1.归纳法Induction
        • 以选择排序求解数组 `A[1...n]`为例
        • 全排列生成generating permutation
  • 2.分治法divide and conquer
  • 3.动态规划dynamic programming

递归recursion

递归技术存在三种特殊情况:

  1. 归纳法Induction:数学证明中的归纳思想
  2. 非重叠子问题Nonoverlapping:分治法(拆成p个子问题)
  3. 重叠子问题overlapping:动态规划(自底向上)(以空间换取时间)

1.归纳法Induction

核心思想:
对于参数为n的问题, 先假设 “参数小于n的子问题已解决”(归纳假设), 再将子问题扩展到参数为n的情况

以选择排序求解数组A[1...n]为例

归纳假设:假设长度为n-1的子数组A[1...n-1]已能成功排序

原问题转化:要解决长度为n的原数组排序,只需先在整个数组A[1...n]中找到最小值min,将其与数组第一个元素交换位置;此时原数组被拆分为“已确定有序的最小值min”和“待排序的子数组A[1...n-1]
[ m i n , A [ 1... n − 1 ] ] \big[ min, A[1...n-1] \big][min,A[1...n1]]
通过这一过程,原问题的规模从n缩小到n-1,最终可递推至规模为1(单个元素天然有序)的基准情况,完成整个排序

通过递推式计算比较次数:
C o m p a r e ( n ) = { 0 n = 1 ( n − 1 ) + C ( n − 1 ) n ≥ 2 = n ( n − 1 ) 2 \begin{align} Compare(n) &= \begin{cases} 0 & n=1 \\ (n-1) + C(n-1) & n \geq 2 \end{cases} \\ &= \frac{n(n-1)}{2} \end{align}Compare(n)={0(n1)+C(n1)n=1n2=2n(n1)

全排列生成generating permutation

目的: 给定整数n nn,生成由数字1 , 2 , … , n 1,2,\dots,n1,2,,n构成的所有排列

归纳假设:已能生成n − 1 n-1n1个元素的所有排列

原问题转化: 将第n nn个元素插入到所有可能位置,从而生成n nn个元素的排列

  1. 固定数字 1 在首位,递归生成{ 2 , 3 , … , n } \{2,3,\dots,n\}{2,3,,n}的所有排列;
  2. 固定数字 2 在首位,递归生成{ 1 , 3 , … , n } \{1,3,\dots,n\}{1,3,,n}的所有排列;
  3. 依次类推,直到固定数字n nn在首位

时间复杂度:Θ ( n ∗ n ! ) \Theta(n*n!)Θ(nn!)
空间复杂度:Θ ( n ) \Theta(n)Θ(n)

递推式写成:
f ( n ) = { 0 n = 1 n f ( n − 1 ) + n n ≥ 2 f(n)= \begin{cases} 0 &n=1 \\ nf(n-1)+n & n \geq2 \end{cases}f(n)={0nf(n1)+nn=1n2

f ( n ) = n ! h ( n ) f(n)=n!h(n)f(n)=n!h(n),

n ! h ( n ) = n ( n − 1 ) ! h ( n − 1 ) + n n!h(n)=n(n-1)!h(n-1)+nn!h(n)=n(n1)!h(n1)+n
h ( n ) = h ( n − 1 ) + 1 ( n − 1 ) ! < e − 1 h(n)=h(n-1)+\frac{1}{(n-1)!}<e-1h(n)=h(n1)+(n1)!1<e1

->f ( n ) < n ! ( e − 1 ) f(n)<n!(e-1)f(n)<n!(e1)

e.g. 对于集合{1, 2, 3, 4}:

1234,2134,3124,4123,

(1234), 1324, 1423,
(2134), 2314, 2413,
(3124), 3214, 3412,
(4123), 4213, 4312,

(1234), 1243
(2134), 2143
(3124), 3142
(4123), 4132
(1324), 1342,
(1423), 1432,
(2314), 2341,
(2413), 2431,
(3214), 3241,
(3412), 3421,
(4213), 4231,
(4312), 4321

->A 4 4 = 24 A_4^4=24A44=24

2.分治法divide and conquer

  • 找到多数元素
  • 最小 / 最大值查找
  • 第 k 小元素查找

3.动态规划dynamic programming

  • 最长公共子序列问题LCS
  • 全对最短路径问题(All-Pairs Shortest Path)
  • 0/1背包问题Knapsack
http://www.jsqmd.com/news/150501/

相关文章:

  • springboot_ssm基于Spring技术的沃克健身房管理系统的设计与实现天津大学java论文
  • 在 WebRTC 实时语音系统中,引入 FSM 不是优化,而是生存条件
  • 2025精选真皮手套厂家/半指手套厂家权威排行 - 栗子测评
  • NVIDIA TensorRT对LoRA微调模型的支持情况
  • springboot_ssm基于web的小型公司人事培训报名管理系统java论文
  • 如何通过TensorRT减少碳排放?绿色AI新路径
  • 可靠的NM500耐磨钢板推荐榜:NM450耐磨钢板、NM500耐磨钢板、NM550耐磨钢板、NM600耐磨钢板选择指南 - 优质品牌商家
  • 蓝易云 - 无法修改BIOS情况下Linux切换根目录到其他磁盘
  • 混合专家模型 (MoE) 深度解析
  • 判断N进制的数字反转相加后是不是回文数
  • 2025采矿业矿山机械耐磨钢板优质产品推荐榜 - 优质品牌商家
  • Java二叉树基础提升
  • 宇宙的像素:真空中一点如何编码无限星光
  • 2025年12月中山市专业工业办公装修公司评测报告 - 优质品牌商家
  • 探索商用车 P2 并联混合动力控制器功能规范与 HCU 控制策略
  • 如何用TensorRT降低GPU算力运营成本?
  • 基于TensorRT的智慧城市AI中枢构想
  • 2025年热门新型软瓷12品牌推荐:低噪声软瓷、新型软瓷、节能软瓷、超低压软瓷、防爆软瓷、防腐软瓷、高压软瓷、SFB软瓷选择指南 - 优质品牌商家
  • 1.session、cookie、token的区别 2.cookie和缓存的区别
  • 从工具到伙伴:个人超级智能体重构人机交互新范式
  • 基于TensorRT的跨框架模型统一部署方案
  • NVIDIA TensorRT与竞品技术全面对比
  • NVIDIA TensorRT在金融风控场景的应用探索
  • 如何实现TensorRT推理结果的可解释性?
  • 深度学习可解释性研究综述:从特征可视化到因果推理
  • 如何评估TensorRT对业务指标的影响?
  • 基于TensorRT的时间序列预测系统优化
  • 使用TensorRT优化Diffusion模型采样过程
  • 如何验证TensorRT转换后模型的准确性?
  • springboot_ssm电影购票选座推荐网站的设计与实现java论文