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

【算法】递归、搜索与回溯算法入门

文章目录

  • 递归
    • 什么是递归
    • 为什么会用到递归
    • 如何理解递归
    • 如何写好一个递归
  • 搜索 vs 深度优先遍历 vs 深度优先搜索 vs 宽度(广度)优先遍历 vs 宽度(广度)优先搜索 vs 暴搜
    • 深度优先遍历 vs 深度优先搜索(dfs)
    • 宽度(广度)优先遍历 vs 宽度(广度)优先搜索(bfs)
    • 关系图
    • 拓展搜索问题
  • 回溯和剪枝

递归

什么是递归

通俗来讲,也就是函数自己调用自己的情况。像二叉树的遍历、快排算法、归并算法等。

为什么会用到递归

本质:解决主问题的时候会衍生出相同的子问题,解决子问题的时候又衍生出相同的子问题。

主问题 -> 相同的子问题
子问题 -> 相同的子问题

一直往复…

如何理解递归

第一层次去理解:画递归展开的细节图
第二层次去理解:编写和理解二叉树中的题目
第三层次去理解:宏观的看待递归的过程

我们要在第三层去理解:

  1. 不要在意递归的细节展开图
  2. 把递归的函数当成一个黑盒(过程是怎么样的不用管,看不到内部过程)
  3. 相信这个黑盒一定能够完成这个任务

如何写好一个递归

  1. 先找到相同的子问题!!!!!-> 决定了函数头的设计
  2. 只关心某一个子问题是如何解决的 -> 函数体的书写
  3. 注意一下递归函数的出口即可

把数据结构中二叉树的题目,试着用第三层的方式去理解一下。

搜索 vs 深度优先遍历 vs 深度优先搜索 vs 宽度(广度)优先遍历 vs 宽度(广度)优先搜索 vs 暴搜

搜索其实就是把整个解空间遍历一遍,本质就是暴力枚举一遍所有的情况。也就是暴搜。

深度优先遍历 vs 深度优先搜索(dfs)

通俗理解:一条道走到黑,走到不能再走时返回,遇到分支,和前面一样的操作。

遍历是形式,搜索是目的。所以他们两可以理解为一个东西。

宽度(广度)优先遍历 vs 宽度(广度)优先搜索(bfs)

通俗理解:一层一层剥开,也就是一层一层的去遍历。

遍历是形式,搜索是目的。所以他们两可以理解为一个东西。

关系图

在这里插入图片描述

拓展搜索问题

全排列问题:就是高中数学学的排列组合的问题,比如1,2,3,有哪几种排列方式。如果数少还能列的出来,但是数一多就很容易一漏掉一些情况。

树状图 (决策树)
在这里插入图片描述

注意:不要局限于认为只有二叉树和图这些问题才能使用dfs和bfs,只要整个问题能用决策树的方式画出来的话,就能使用。

回溯和剪枝

回溯其实就是深搜里的一个小分支。
在这里插入图片描述

简单理解一下回溯,就是尝试某种情况的时候,发现走不通,返回到上一级的这个操作。也就是图中红色按1走的然后返回到红点的过程。
再简单理解一下剪枝,就是按1返回到红点后再走到按2走,发现行不通再返回到红点,此时往上往下都有路线,但是往上走已经尝试过了,不用再走了。其实就是在分叉路口有两种选择的时候,但是我们已经明确知道了其中一个选择不是我们最终想要的结果的时候,我们就把这个结果给略过。

http://www.dtcms.com/a/296913.html

相关文章:

  • 星痕共鸣数据分析2
  • 【Guava】1.1.我的报告
  • 移动前端开发与 Web 前端开发的区别
  • 电商接口常见误区与踩坑提醒
  • 3.SOAP
  • 跨境支付入门~国际支付结算(风控篇)
  • 酷狗最新版KG-DEVID 算法分析
  • Unity 时间抗锯齿(Temporal Antialiasing, TAA)技术解析
  • T-RO顶刊|单视角“找相似”,大阪大学提出新型点云描述符(C-FPFH),杂乱场景一抓一个准!
  • 2025国自然青基、面上会评结束,资助率或创新低,跌破11.19%!
  • 期货交易系统用户操作与应用逻辑全析
  • springboot实战demo2
  • 图像识别任务的边界正在改变
  • Linux系统编译安装PostgreSQL 12.8(含报错处理与配置热加载)
  • C++标准库算法实战指南
  • Linux 进程间通信:共享内存详解
  • 2025年人形机器人动捕技术研讨会于7月31日在京召开
  • 如何使用 pdfMake 中文字体
  • Next.js 中配置不同页面布局方案
  • 无锡市亨达电机盛装亮相 2025上海生物发酵展引关注
  • 深入理解大语言模型生成参数:temperature、top\_k、top\_p 等全解析
  • 首发即开源!DAWorkBench数据可视化分析软件正式发布!(附源码下载网址)
  • ubuntu安装teams解决方法
  • JavaScript中this的5大核心规则详解
  • vue 项目中 components 和 views 包下的组件功能区别对比,示例演示
  • Eureka-服务注册,服务发现
  • CSDN技术专栏开篇:高效开发环境搭建指南
  • Android Activity与Fragment生命周期变化
  • 深度学习(鱼书)day01--感知机
  • springboot实战篇2