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

【递归,搜索与回溯算法篇】- 名词解释

在这里插入图片描述

一. 递归

1. 什么是递归?

  • 定义: 函数自己调用自己的情况
  • 关键点:
    终止条件: 必须明确递归出口,避免无限递归
    子问题拆分: 问题需能分解成结构相同的更小的子问题
  • 缺点:
    栈溢出风险: 递归深度过大时可能引发栈溢出

2. 为什么会用到递归?

  • 二叉树的后序遍历
  • 快排
  • 归并

3. 如何理解递归?

  1. 递归展开的细节图
  2. 二叉树中的题目
  3. 宏观看待递归的过程
    ➀不要在意递归的细节展开图
    ➁把递归的函数当成一个黑盒
    ➂相信这个黑盒一定能完成任务

4. 如何写好一个递归?

  1. 先找到相同的子问题 -> 函数头的设计
  2. 只关心某一个子问题是如何解决的 -> 函数体的部分
  3. 注意递归函数的出口

手写笔记:
在这里插入图片描述
在这里插入图片描述

二.搜索 vs 深度优先遍历 vs深度优先搜索 vs 宽度优先遍历 vs 宽度优先搜索 vs 暴搜

  1. 深度优先遍历 vs 深度优先搜索 -> dfs
  2. 宽度优先遍历 vs 宽度优先搜索 -> bfs
    遍历是形式,目的是搜索

手写笔记:
在这里插入图片描述

3. 回溯与剪枝

回溯:

  1. 本质: 就是深搜
  • 在找某种情况的时候,发现这个情况行不通,然后返回到上一级的操作
  1. 核心思想:
  • 路径: 记录已做出的选择
  • 选择列表: 当前可用的选项
  • 结束条件: 满足条件时将路径加入结果

剪枝:

  1. 目标: 减少无效搜索,提前终止不可能到达解的路径
  2. 剪枝策略:
  • 可行性剪枝: 当前路径明显不满足约束时终止
  • 去重剪枝: 避免生成重复解
  • 最优解剪枝: 在求最优解时,若当前路径已劣于已知最优解,提前终止

http://www.kler.cn/a/595223.html

相关文章:

  • C#零基础入门篇(18. 文件操作指南)
  • C51 Proteus仿真实验23:蜂鸣器播放音乐
  • 从PGC到AIGC:海螺AI多模态内容生成系统架构一站式剖析
  • 2025-3-17 腾讯云-大数据方向-成都面试
  • 黑马程序员-微服务开发-MybatisPlus的使用
  • 记一次wsl2+docker无法运行的经历
  • OSPF-8 OSPF特殊区域NSSA
  • PIC CCS编译器中的ATOI()、ATOL()和ATOI32()
  • QPrintDialog弹出慢的问题
  • 计算机技术系列博客——目录页(持续更新)
  • git 设置保存密码 git保存密码
  • 大屏技术汇集【目录】
  • 在Springboot中集成unihttp后应用无法启动的解决办法
  • HTML 中如何设置页面的语言,这对 SEO 和无障碍访问有什么影响?
  • MySQL 中,查看执行频次、慢查询日志、SHOW PROFILE和 EXPLAIN性能分析和优化
  • 如何自定义知行之桥Webhook端口返回的Response消息
  • C#使用SnsPictureBox.dll绘制点,线段、圆、折线、多边形、测量尺等多种图形。
  • 【大模型LLM第十三篇】Agent入门之CoT,self-ask,Plan-and-execute,ReAct串讲
  • 【pytest框架源码分析五】pytest插件的注册流程
  • AtCoder - arc086_d Shift and Decrement分析与实现