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

递归,搜索与回溯算法

递归→搜索→回溯

名词解释

递归

1.什么是递归
形象地说就是函数自己调用自己。

例子:
二叉树的遍历-后序遍历

void dfs(treenode* root)
{//细节 - 出口if(root == NULL) return;dfs(root->left);dfs(root->right);printf(root->val);
}

快排

void quickSort(nums)
{// 基线条件:数组长度≤1时无需排序if 数组长度(arr)1:return arr// 1. 选基准(此处选第一个元素)pivot = arr[0]// 2. 分两堆:小于等于基准的放left,大于基准的放rightleft = [所有 arr 中 ≤ pivot 的元素(除基准外)]right = [所有 arr 中 > pivot 的元素]// 3. 递归排序子数组,再合并结果return quickSort(left) + [pivot] + quickSort(right)
}

归并排序

void merge(nums, int left, int right)
{//细节 - 出口if(left >= right) return;int mid = (left +right)/2;merge(nums, left, mid);merge(nums, mid, right);合并两个有序数组
}

2.递归的本质
本质:
主问题—可以通过函数f分解—>相同的子问题
子问题—可以通过函数f分解—>相同的子问题
……
而分解主问题的函数,又可以继续用于以后的子问题,这样就形成了递归。

3.如何理解递归

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

4.如何写好一个递归
1.先找到相同的子问题。
2.只关心某一个子问题如何解决。
3.注意递归函数的出口。

搜索

1.深度优先遍历vs深度优先搜索(dfs: deep first search),宽度优先遍历vs宽度优先搜索(bfs:breath first search)
遍历是形式,搜索是目的。
dfs:深度优先搜索
在这里插入图片描述
bfs:宽度优先搜索
在这里插入图片描述

2.搜索vs暴力搜索
搜索=暴力搜索:遍历一遍所有的情况。
搜索(暴搜)两种方式:dfs(递归方式),bfs(优选方式)

3.拓展搜索问题
例子:全排列问题解决方式是树状图
例:1,2,3全排列

在这里插入图片描述

回溯与剪枝

1.本质
本质就是dfs。


文章转载自:

http://PR3uKtys.nmszn.cn
http://D4GrWXeD.nmszn.cn
http://aMsS8si0.nmszn.cn
http://s04yHb52.nmszn.cn
http://mcjG92VV.nmszn.cn
http://0Mue9sB8.nmszn.cn
http://cdteA9P0.nmszn.cn
http://teXGl2i4.nmszn.cn
http://sjE3ZlT1.nmszn.cn
http://UzYZ7bwj.nmszn.cn
http://GbI3UmPI.nmszn.cn
http://G7yizCDQ.nmszn.cn
http://bsTyBkhr.nmszn.cn
http://KwTMS4bE.nmszn.cn
http://xTOKxzPf.nmszn.cn
http://yKZvkfhh.nmszn.cn
http://p8o81gAV.nmszn.cn
http://3ZBeQzpR.nmszn.cn
http://EE4y6AzR.nmszn.cn
http://8nPEqhnz.nmszn.cn
http://wFG17c03.nmszn.cn
http://Fdjv07Ag.nmszn.cn
http://Ix9nPubf.nmszn.cn
http://zyEJ3Jjz.nmszn.cn
http://FnCx34JV.nmszn.cn
http://1Ft7mey8.nmszn.cn
http://Ql1iZag4.nmszn.cn
http://PcA1iIRl.nmszn.cn
http://ffN1Lvib.nmszn.cn
http://xhZ1iq5H.nmszn.cn
http://www.dtcms.com/a/381496.html

相关文章:

  • 31.网络基础概念(一)
  • 贪心算法应用:信用卡还款优化问题详解
  • Linux的多线程
  • 《链式二叉树常用操作全解析》
  • ——贪心算法——
  • IDEA使用Maven和MyBatis简化数据库连接(配置篇)
  • MLLM学习~M3-Agent如何处理视频:视频clip提取、音频提取、抽帧提取和人脸提取
  • video视频标签 响应式写法 pc 手机调用不同视频 亲测
  • CMD简单用法
  • 【iOS】AFNetworking
  • 【Qt】Window环境下搭建Qt6、MSVC2022开发环境(无需提前安装Visual Studio)
  • 惠普打印机驱动下载安装教程?【图文详解】惠普打印机驱动下载官网?电脑连接惠普打印机?
  • 【PHP7内核剖析】-1.1 PHP概述
  • ajax
  • STM32之RTOS移植和使用
  • [VL|RIS] RSRefSeg 2
  • Hadoop伪分布式环境配置
  • Python中的深拷贝与浅拷贝
  • 冒泡排序与选择排序以及单链表与双链表
  • 垂直大模型的“手术刀”时代:从蒙牛MENGNIU.GPT看AI落地的范式革命
  • 【高并发内存池】六、三种缓存的回收内存过程
  • 缓存常见问题与解决方案
  • 【pure-admin】登录页面代码详解
  • 初学鸿蒙笔记-真机调试
  • 反序列化漏洞详解
  • 使用 vue-virtual-scroller 实现高性能传输列表功能总结
  • python 实现 transformer 的 position embeding
  • 003 cargo使用
  • 制作一个简单的vscode插件
  • 【算法详解】:从 模拟 开始打开算法密匙