回溯法、全排列、子集等

news/2024/5/21 1:39:56

回溯法

感想:回溯算法本质是一个循环,有点像while循环

一些回溯法(递归)的经典应用

1.全排列
2.子集

其实上面两个点,也是对应着高中数学里面的“排列”与“组合”

1.全排列问题

给定一个集合S{a,b,c},把其中元素按照不同顺序进行排序,eg.“abc”,“bca”,“cab”…全排列的结果为n!个。

基本思想是树(解答树)的遍历,如果是使用dfs(暴搜),那么可以使用递归来写。

在这里插入图片描述

解答树
/*
暴力全排列的思路是:
维护一个path容器,用来装选择好的内容,从集合S中获取元素[i],然后查询path中是否存在[i],如果不存在,跳过该元素,遍历下一个,如果[i]在path中不存在,则将[i]放入path中。
不断重复这个过程,使用dfs进行纵向遍历,使用for循环进行横向遍历。
*/
//伪代码
void dfs(int k){//k层数if(k = n) save(path);//保存path,也就是保存一个答案else{//用else省一个return语句for(int i = 0; i < n; i++){if(!check(S[i])){//检查S[i]是否在path中存在state.set(S[i]) = true;//path.add(S[i]);dfs(k+1);//向下遍历state.set(S[i]) = false;//去掉该元素,为下一个元素放置做好准备(元素+状态的还原)path.remove(S[i]);}}}
}
//样例代码见package cjm.recursion.full_permutation;
2.子集

子集问题描述:使用集合S{1,2,3}中的元素构建新的集合,每个元素只能使用一次,元素一样的集合只算一个,eg.{1,2},{2},{1,2,3}…

其实这个子集问题的本质就是高中学到的组合问题,n个元素有几种组合方式,答案数量为C(n,m);

增量构造法
/*
思路:与全排列的算法框架类似,也是对解答树进行遍历,不过不同点在于每一次遍历时都要将path加入答案集ans{},而且将S[i]放到前缀后时所需的判断也是不一样的。具体来说,[i]如果不在path中,且前缀+[i]构成的新集合如果不在答案集中,那么可以将[i]放入path中,并进行遍历。
本质还是dfs纵向遍历+for的横向遍历。
*/
void dfs(int k){//y总那边用的是ufor(int i = 0; i < n; i++){if(!check(S[i])){//检查S[i]是否满足条件([i]属于path,path+[i]属于ans)setState(S[i]);//更新状态,包括将元素加入path,更新新集合在ans的存在等等dfs(k+1);//向下遍历reState(S[i]);//恢复状态}}}
位向量法

先空着,有空再学再写

二进制法

先空着,有空再学再写

引用:紫书


http://www.mrgr.cn/p/42026743

相关文章

选择排序桌面检查

码云代码:https://gitee.com/yibo886/codes/0ihau3t9pj6bkfqzxcmnl93 博客园: 一、实验题目 :代码审查 二、实验目的 1、熟悉编码风格,利用开发环境所提供的平台工具对代码进行自动格式审查; 2、根据代码规范制定代码走查表,并按所制定的审查规范互审代码。 三、实验内容…

tomcat打开乱码修改端口

将UTF-8改成GBK 如果端口冲突&#xff0c;需要修改tomcat的端口

更深层次理解传输层两协议【UDP | TCP】【UDP 缓冲区 | TCP 8种策略 | 三次握手四次挥手】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 再谈端口号 端口号的返回…

docker的一些命令 以及dockerFile语法

文件夹重新命名mv node-v14.18.1-linux-x64 node-v14.18.1 dokcer 命令 将linux的文件复制到docker容器里面 docker cp /usr/local/node-v14.18.1/ 8ec26052dfad:/usr/local/node-v14.18.1 将docker容器里面的文件复制到linux docker container cp ng…

代码审计-PHP模型开发篇动态调试反序列化变量覆盖TP框架原生POP链

知识点 1、PHP审计-动态调试-变量覆盖 2、PHP审计-动态调试-原生反序列化 3、PHP审计-动态调试-框架反序列化PHP常见漏洞关键字 SQL注入&#xff1a; select insert update delete mysql_query mysqli等 文件上传&#xff1a; $_FILES&#xff0c;type"file"&…

实验四:代码审查

一、实验题目 :代码审查 二、实验目的 1、熟悉编码风格,利用开发环境所提供的平台工具对代码进行自动格式审查; 2、根据代码规范制定代码走查表,并按所制定的审查规范互审代码。 三、实验内容 1、IDEA环境和PyCharm环境二选一; IDEA环境 (1)预先准备在IDEA环境下实现对输…

代码审查

一、实验题目 :代码审查 二、实验目的熟悉编码风格,利用开发环境所提供的平台工具对代码进行自动格式审查;根据代码规范制定代码走查表,并按所制定的审查规范互审代码。三、实验内容 PyCharm环境预先准备在PyCharm环境下实现对输入的n个整数进行排序的代码;利用Code Inspe…

炒美股怎么开户?

近年来&#xff0c;随着国内投资者对境外投资需求的不断增长&#xff0c;炒美股逐渐成为许多投资者的选择。然而&#xff0c;随着监管政策的不断完善&#xff0c;传统的互联网券商开户方式已经不再适用。那么&#xff0c;对于想要入场美股市场的投资者来说&#xff0c;该如何开…

实验四—代码审查

一、实验题目 :代码审查 二、实验目的 1、熟悉编码风格,利用开发环境所提供的平台工具对代码进行自动格式审查; 2、根据代码规范制定代码走查表,并按所制定的审查规范互审代码。 三、实验内容 1、IDEA环境和PyCharm环境二选一; IDEA环境 (1)预先准备在IDEA环境下实现对输…

从0到1构建AI agent【零代码】

一、前言 想象一下&#xff0c;如果AI的想象力被彻底释放&#xff0c;那将是一场怎样的革命&#xff1f;“大语言模型不过是个贪吃蛇&#xff0c;而AI Agent却能创造出‘王者荣耀’。”这不仅是网上的一句戏言&#xff0c;它预示着一个不可逆转的趋势。比尔盖茨更是一语中的&am…

Maven多模块工程提示其它模块依赖找不到(明明已经添加)

查看有没有重复标记文件夹!!!(我的就是这样)

Html转C#/JSP代码工具

Html转C#/JSP代码工具为您提供在线Html转换为Jsp和C#代码,Jsp代码,Html转C#,Html转.Net,Html转Jsp,在线Html转Jsp代码,HTML与JSP和C#,.Net代码在线转换,使用这个Html在线转换工具,能得到拼接好代码等 免费工具地址:http://tools.linuxsou.com/html2php/ 千行代码,Bug何处藏。…

数据仓库实验三:分类规则挖掘实验

目录 一、实验目的二、实验内容和要求三、实验步骤1、创建数据库和表2、决策树分类规则挖掘&#xff08;1&#xff09;新建一个 Analysis Services 项目 jueceshu&#xff08;2&#xff09;建立数据源视图&#xff08;3&#xff09;建立挖掘结构 DST.dmm&#xff08;4&#xff…

cap和base分布式理论

一、分布式理论 1.CAP理论 CAP理论是说对于分布式数据存储&#xff0c;最多只能同时满足一致性&#xff08;C&#xff0c;Consistency&#xff09;、可用性&#xff08;A&#xff0c; Availability&#xff09;、分区容忍性&#xff08;P&#xff0c;Partition Tolerance&…

JVM的垃圾回收机制(GC机制)

在Java代码运行的过程中&#xff0c;JVM发现 某些资源不需要再使用的时候&#xff0c;就会自动把资源所占的内存给回收掉&#xff0c;就不需要程序员自行操作了。“自动回收资源”就是JVM的“垃圾回收机制”&#xff0c;“垃圾回收机制”也称"GC机制"。 对于Java代码…

python的多继承中的方法重写

前言 多继承势必要解决同名属性冲突。今天测试一下。 正文 左右同名(左侧优先)当左侧基类和右侧基类中存在同名方法时,不管是否包含重写,都是左侧优先。今天主要探讨的是,左侧基类中不直接包含同名方法。约定我们约定,下面的标题情况全都是在左侧基类不直接包含同名方法的。…

【自动化测试】关键字驱动接口自动化测试

1. 概念:  在软件测试领域,"数据驱动"和"关键字驱动"是两种自动化测试的设计模式, 它们都旨在提高测试效率,减少重复劳动,但它们的实现方式和应用场景有所不同。(1) 数据驱动(Data-Driven Testing, DDT):**优点**     a. 可变数据:测试数据的…

2024年教你学浪视频如何导出

学浪视频已成为知识探索的灯塔。2024年掌握学浪视频的导出技巧&#xff0c;就如同握住了一把开启智慧宝库的钥匙。想象一下&#xff0c;无论是在通勤的地铁上&#xff0c;还是在宁静的咖啡馆角落&#xff0c;你都能随时观看自己的学习视频 下面是我已经打包好的学浪视频下载工…

AlphaFold3(AF3)简单介绍:预测各种生物分子结构和它们之间相互作用的深度学习模型

参考: 文章地址: https://www.nature.com/articles/s41586-024-07487-w https://blog.google/technology/ai/google-deepmind-isomorphic-alphafold-3-ai-model/ AlphaFold3体验官网: https://golgi.sandbox.google.com/ 《Accurate structure prediction of biomolecula…

实验4:代码审查

实验4 代码审查 一、实验题目 :代码审查 二、实验目的 1、熟悉编码风格,利用开发环境所提供的平台工具对代码进行自动格式审查; 2、根据代码规范制定代码走查表,并按所制定的审查规范互审代码。 三、实验内容 1、IDEA环境和PyCharm环境二选一; IDEA环境 (1)预先准备在ID…