news 2026/1/30 8:24:02

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[算法设计与分析-从入门到入土] 递归

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

知乎: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
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/30 0:00:18

TensorRT在短视频内容审核中的应用实例

TensorRT在短视频内容审核中的应用实例 如今&#xff0c;一条短视频从上传到上线&#xff0c;往往只需要几秒钟。在这短暂的时间里&#xff0c;平台不仅要完成视频转码、封面抽取&#xff0c;还要完成一轮或多轮内容安全审核——判断是否包含涉黄、暴恐、违禁信息。对于日均处理…

作者头像 李华
网站建设 2026/1/29 21:21:12

使用TensorRT优化语义分割模型的实战记录

使用TensorRT优化语义分割模型的实战记录 在自动驾驶系统中&#xff0c;实时感知周围环境是决策的基础。一辆车每秒需要处理数十帧高分辨率图像&#xff0c;并对道路、行人、车辆等进行像素级识别——这正是语义分割的核心任务。然而&#xff0c;即便使用SOTA模型&#xff0c;…

作者头像 李华
网站建设 2026/1/30 6:52:50

如何使用 ONNX 运行 Stable Diffusion

原文&#xff1a;towardsdatascience.com/how-to-run-stable-diffusion-with-onnx-dafd2d29cd14?sourcecollection_archive---------4-----------------------#2024-05-13 解决安装过程中的兼容性问题 | ONNX 用于 NVIDIA GPU | Hugging Face 的 Optimum 库 https://medium.c…

作者头像 李华
网站建设 2026/1/25 21:04:22

NVIDIA官方镜像安全性认证说明:TensorRT篇

NVIDIA官方镜像安全性与TensorRT推理优化实践 在AI模型日益复杂、部署场景愈发多样的今天&#xff0c;如何让一个训练好的神经网络真正“跑得快、稳得住、安心得下”&#xff0c;是每个工程师都绕不开的问题。尤其是在金融、医疗、自动驾驶这类对延迟和可靠性要求极高的领域&a…

作者头像 李华
网站建设 2026/1/27 22:55:27

告别资产丢失!U位管理系统如何让机房管理效率提升300%?

在数字化转型的加速期&#xff0c;数据中心机房已成为企业运营的核心命脉。然而&#xff0c;传统的机房资产管理方式&#xff0c;却常常让运维团队陷入“资产找不到、空间用不好、效率提不高、安全控不住”的困境。据行业统计&#xff0c;因资产定位不准和运维效率低下导致的隐…

作者头像 李华
网站建设 2026/1/30 1:02:58

使用TensorRT进行模型benchmark的标准流程

使用TensorRT进行模型benchmark的标准流程 在AI系统从实验室走向生产环境的过程中&#xff0c;一个常被忽视但至关重要的环节是&#xff1a;模型推理性能到底能不能扛住真实流量&#xff1f; 训练完成的模型精度再高&#xff0c;如果在线上服务中延迟飙升、吞吐不足&#xff…

作者头像 李华