打卡第22天------回溯算法

embedded/2024/9/25 21:21:06/

开始学习了,希望我可以尽快成功上岸!

一、回溯理论基础
  • 什么是回溯法?

回溯法也可以叫做回溯搜索法,它是一种搜索的方式。

回溯是递归的副产品,只要有递归就会有回溯。

  • 回溯法的效率

回溯法的本质是穷举,穷举所有可能,然后找出我们想要的答案。如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。

组合无序,排列有序。

  • 回溯法模板

回溯三部曲,可以按照如下步骤:

  1. 回溯函数模板返回值以及参数

  2. 回溯函数终止条件

  3. 回溯搜索的遍历过程 

回溯函数遍历过程伪代码如下:

for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯,撤销处理结果
}

for循环就是遍历集合区间,可以理解一个节点有多少个孩子,这个for循环就执行多少次。

backtracking这里自己调用自己,实现递归。

大家可以从图中看出for循环可以理解是横向遍历,backtracking(递归)就是纵向遍历,这样就把这棵树全遍历完了,一般来说,搜索叶子节点就是找的其中一个结果了。

分析完过程,回溯算法模板框架如下:

void backtracking(参数) {if (终止条件) {存放结果;return;}

http://www.ppmy.cn/embedded/87942.html

相关文章

【QT】无法打开QT的ui文件,出现闪退情况

打开qt的ui文件出现闪退的情况: 解决办法:点击扩展-Qt VS Tools-Options 找到Qt General中的Qt Designer 的Run in detached window改为True。

Mysql按照范围区间创建分区表

定义 每一个分区仅包含在指定范围内的数据列。这样的分区方式就是范围分区。在Mysql的范围分区表定义中,分区范围需要连续并且不会有覆盖。定义范围分区表时,使用VALUES LESS THAN操作符。在PARTITION BY RANGE语法中,建立分区表指定分区时&…

Zookeeper源码剖析-启动类

文章目录 从启动脚本开始分析ZooKeeper启动脚本 `zkServer.sh` 分析1. 脚本位置2. 脚本结构3. 主要部分3.1 检测环境变量3.2 加载配置文件3.3 设置环境变量3.4 日志配置3.5 启动和停止命令3.6 启动ZooKeeper3.7 停止ZooKeeper4. 其他功能5. 调用方式总结ZooKeeper的 QuorumPeer…

C/C++编程-算法学习-数字滤波器

数字滤波器 一阶低通滤波器结论推导11. 基本公式推导2. 截止频率 和 采样频率 推导 实现 二阶低通滤波器实现1实现2推导1推导2 一阶低通滤波器 结论 其基本原理基于以下公式: o u t p u t [ n ] α ∗ i n p u t [ n ] ( 1 − α ) ∗ o u t p u t [ n − 1 ] …

景区导览系统开发

景区导览系统的开发是一个综合性的项目,涉及多个领域的知识和技术,包括互联网、移动开发、数据库管理、地图导航、人工智能等。以下是一个详细的开发流程介绍: 一、需求分析 市场调研:了解当前旅游市场的趋势和游客的需求&#…

一篇文章,学会单元测试

一、什么是单元测试 这一部分主要内容是讲解什么是测试,什么又是单元测试,以及 Java 中常用测试框架 Junit 的学习。 1.1 什么是软件测试 软件测试(英语:Software Testing),描述一种用来促进鉴定软件的正…

《GPT-4o mini:开启开发与创新的新纪元》

在科技发展的快速进程中,OpenAI 推出的 GPT-4o mini 模型如同一阵春风,给开发者们带来了新的希望和机遇。它以其卓越的性能和极具吸引力的价格,成为了行业内热议的焦点。 当我首次听闻 GPT-4o mini 的消息时,内心充满了好奇与期待…

算法训练营第52天|图论理论基础|深搜理论基础|98. 所有可达路径|广搜理论基础

图论理论基础 无向图:连通图;极大连通子图称之为该图的一个连通分量 有向图:强连通图;极大强连通子图称之为该图的强连通分量 如何用代码来表示一个图呢? 一般使用邻接表、邻接矩阵 或者用类来表示。 深搜理论基础 d…