算法-回溯算法思想

news/2025/11/16 23:14:03/文章来源:https://www.cnblogs.com/lilyflower/p/19229311

算法-回溯算法思想

1. 回溯算法的基本概述

什么是回溯算法?回溯算法,本质上就是

回溯 = 递归 + 状态恢复 + 剪枝

它是一种暴力搜索的优化形式,通过“尝试 -> 撤销”来穷举所有可能解,并在过程中剪枝无效分枝

2. 回溯适用的算法题目

场景 典型关键词 示例题目
组合/子集/排列 “所有可能的组合”、“返回所有子集”、“全排列” 78. Subsets, 46. Permutations
路径搜索 “是否存在路径”、“从起点到终点”、“相邻单元格” 79. Word Search, 212. Word Search II
约束满足问题 “和为 target”、“不重复使用”、“每个元素最多用一次” 39. Combination Sum, 40. Combination Sum II
构造类问题 “生成所有有效括号”、“解数独”、“N皇后” 22. Generate Parentheses, 51. N-Queens

核心标志:

  • 需要枚举所有的可行解
  • 解具有 阶段性决策结构
  • 不能重复使用状态(需标记+恢复)
  • 有明确的终止条件

3. 回溯算法的五大要素(分析 Checklist)

在遇到回溯算法题目时,首先要分析如下的5个问题:

要素 问题 示例(Combination Sum)
1. 路径(Path) 当前已经做出的选择是什么? 已选的数字列表 path
2. 选择列表(Choices) 当前可以做哪些选择? candidates[i](从 index 开始)
3. 结束条件(Base Case) 什么时候算找到一个解? target == 0
4. 约束条件(Constraints) 什么选择是非法的? target < 0 或重复组合
5. 状态管理(State) 如何避免重复使用?如何恢复? path.add() / path.remove();排序+同层去重

4. 通用算法模板

4.1 存在性问题(返回boolean)

boolean backtrack(状态,参数...) {if (满足结束条件) return true;if (不合法) return false;for (每个选择 in 选择列表) {if (backtrack(新状态)) return true;}// 不满足条件,恢复状态return false;
}

4.2 收集所有解(返回 List<List<...>>)

void backtrack(List<解> res, 路径 path, int startIndex, ...) {if (满足结束条件) {res.add(new ArrayList<解>(path));return;}if (不合法) {return;}for (int i = startIndex; i < 选择总数; i++) {// 可选】剪枝:跳过无效或重复选择if(需要跳过) {continue;}path.add(选择[i]);backtrack(res, path, i/i+1, ...);	// 如果题目要求选课选择重复的,从i开始;如果要求不允许重复,则从 i+1 开始进行递归path.remove(path.size() - 1);	// 不符合条件进行回溯时,移除的是最近一次新添加入的元素,也就是撤销最近一次的选择}
}

5. 去重的一些核心技巧(重点!)

场景:数组包含重复元素,但是解不能重复

正确的做法是:

  • 先排序Arrays.sort(nums)

  • 在 for 循环中判断

    for(参数) {if(i > startIndex && nums[i] == nums[i - 1]) {continue;	// 当前遍历的索引位置元素不是当前遍历的开头元素,并且和上一个元素的值相同,则跳过当前元素的处理}
    }
    

一些比较没有意义的做法

  • Set 存结果再转 List,这种做法没有任何意义!
  • 在递归开头判断是否重复,也没有意义,因为这样无法阻止无效递归

💡 为什么 i > startIndex

表示当前不是这一层的第一个选择。如果是第一个(i == startIndex),即使和前面相同,也是新路径的开始,应保留。

6. 一些性能优化的小技巧

技巧 说明
提前排序 便于剪枝和去重
剪枝 if (nums[i] > target) break;(排序后有效)
使用 StringBuilder / LinkedList 减少字符串/列表操作开销
避免深拷贝过大对象 只在必要时复制路径

7. 总结:回溯解题四步法

  1. 确定递归函数参数:路径、起始位置、目标状态等
  2. 写终止条件:何时将路径加入结果?
  3. 写 for 循环:遍历当前可选集合
  4. 做选择 → 递归 → 撤销选择
  • 子集/组合问题:用 startIndex 控制起点
  • 排列问题:用 used[] 标记是否使用
  • 网格问题:用原地标记(如 #)防重复
  • 有重复元素:先排序,再同层去重

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/967471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年 11 月中医师承确有专长权威推荐榜:师承教育、专长医师资格考核与合法执业路径深度解析

2025 年 11 月中医师承确有专长权威推荐榜:师承教育、专长医师资格考核与合法执业路径深度解析 一、中医师承确有专长行业背景与发展现状 随着《中医药法》的深入实施和中医药发展战略的持续推进,中医师承教育作为传…

[LangChain] 19. 持久化记忆

目前我们所使用的 Memory,大多只存在于内存中,一旦进程关闭、用户刷新页面,所有历史对话都会丢失。实际项目中,我们常常希望:让用户“第二次回来”还能接着上次对话继续聊 将多轮聊天记录保存在本地或数据库中,用…

2025 年 11 月 Q355B/Q345B/16Mn 冷拉圆钢厂家推荐排行榜,高强度结构钢,低合金圆钢,精密冷拉钢材公司精选

2025 年 11 月 Q355B/Q345B/16Mn 冷拉圆钢厂家推荐排行榜 行业背景分析 随着我国制造业向高质量发展转型,高强度结构钢和低合金圆钢在机械制造、汽车工业、重型装备等领域的应用日益广泛。Q355B、Q345B和16Mn作为典型…

2025 年 11 月 Q355B/Q345B/16Mn 冷拉方钢厂家推荐排行榜,高强度结构钢,建筑机械用冷拉方钢,优质钢材厂家精选

2025 年 11 月 Q355B/Q345B/16Mn 冷拉方钢厂家推荐排行榜,高强度结构钢,建筑机械用冷拉方钢,优质钢材厂家精选 行业背景与发展现状 冷拉方钢作为重要的工业基础材料,在建筑机械、重型装备、工程结构等领域发挥着关…

*题解:P11364 [NOIP2024] 树上查询

原题链接 困难题。 解析 考虑处理出形如 \((u,v,d)\) 的三元组表示编号从 \(u\) 到 \(v\) 的点的 LCA 深度为 \(d\),且区间 \([u,v]\) 是极长的。怎么处理呢?肯定要利用子树信息,我们尝试进一步合并子树已经合并出的…

oj第一题python解法

用pyhon实现自动识别输入截止功能 一、 序言与题目引入 对于新接触编程语言如python和c的新同学来说,学校的oj平台上有很好配套练习,既有一定难度,又不会像LeetCode等程序员公用的成熟平台那样太难上手,不过学长学…

11.16方法

11.16方法 1. 方法 是什么? 方法(method)是程序中最小的执行单元 有什么用? 重复的代码、具有独立功能的代码可以抽取到方法中。方法可以提高代码的复用性、可以提高代码的可维护性 2.方法的格式 方法就是把一些代…

基于Tcl命令的HyperView截图

准备工作 Tcl/Tk 命令可以实现 HyperWorks 的中更底层的操作和其他高级功能。应当注意在 HyperMesh 中不支持 Tcl 命令,必须在 HyperMesh Desktop 或 HyperWorks 中使用。不过 HyperView 似乎就直接是在 HyperWorks 环…

2025 年 11 月智能吉他厂家推荐排行榜,无弦吉他,自动档吉他,伴奏吉他,MIDI吉他,创新科技与便捷演奏体验之选

2025 年 11 月智能吉他厂家推荐排行榜,无弦吉他,自动档吉他,伴奏吉他,MIDI吉他,创新科技与便捷演奏体验之选 随着数字音乐技术的快速发展,智能乐器领域迎来了革命性突破。无弦吉他、智能吉他、自动档吉他、伴奏吉…

团队作业3——需求改进与系统设计

团队作业3——需求改进与系统设计团队作业3——需求改进与系统设计这个作业属于哪个课程 计科23级12班这个作业要求在哪里 团队作业3——需求改进与系统设计这个作业的目标 需求与原型改进、系统设计、Alpha阶段任务分…

完整教程:Redis(69)Redis分布式锁的优点和缺点是什么?

完整教程:Redis(69)Redis分布式锁的优点和缺点是什么?2025-11-16 23:02 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important…

2025 年 11 月 Q355B/Q345B/16Mn 方钢厂家推荐排行榜,低合金高强度方钢,结构用方钢,建筑用方钢公司推荐

2025 年 11 月 Q355B/Q345B/16Mn 方钢厂家推荐排行榜 在建筑、机械制造和基础设施建设领域,Q355B、Q345B 和 16Mn 方钢作为低合金高强度结构钢材,凭借其优异的力学性能和焊接特性,成为关键承重构件和机械部件的首选…

2025 年 11 月精密仪器厂家推荐排行榜,触摸仪表,手表锁具,测试针,医疗传感器,Pogopin声学弹簧公司精选

2025 年 11 月精密仪器厂家推荐排行榜,触摸仪表,手表锁具,测试针,医疗传感器,Pogopin声学弹簧公司精选 随着工业4.0和智能制造的深入推进,精密仪器行业正迎来技术升级与市场需求的双重驱动。精密仪器作为工业生产…

MySQL 数据库核心操作全解析:从创建到备份与连接管理 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

evalscope使用2-使用自定义数据集压测

使用evalscope进行大模型测试-使用自定义数据集进行压测 使用自定义数据集进行压测,需要定义模板、提示词数据集、自定义数据集插件,命令行中指定--dateset参数为custom 1、evalscope命令,其中指定dataset为cust…

2025 年 11 月摩托车/机车厂家推荐排行榜:街车、跑车、巡航机车、越野摩托车品牌实力与市场口碑深度解析

2025 年 11 月摩托车/机车厂家推荐排行榜:街车、跑车、巡航机车、越野摩托车品牌实力与市场口碑深度解析 行业背景与发展趋势 摩托车产业作为现代交通工具领域的重要组成部分,近年来呈现出多元化、专业化的发展态势。…

20232402 2025-2026-1 《网络与系统攻防技术》实验五实验报告

20232402 2025-2026-1 《网络与系统攻防技术》实验五实验报告 1.实验内容 1.1 域名与IP信息查询 用whois、dig、nslookup、traceroute/tracert及在线工具查询baidu.com,获取DNS注册人及联系方式,域名对应IP地址,IP注…

2025 年 11 月热轧方钢/扁钢厂家推荐排行榜,方钢,扁钢,热轧方钢,热轧扁钢,优质钢材生产公司推荐

2025年11月热轧方钢/扁钢厂家推荐排行榜 行业背景与发展现状 热轧方钢和扁钢作为基础金属材料,在建筑结构、机械制造、轨道交通等领域具有广泛应用。随着我国制造业转型升级的深入推进,对热轧钢材的尺寸精度、表面质…

2025 年 11 月冷拉/冷拔六角钢厂家推荐排行榜,冷拉六角钢,冷拔六角钢,精密冷拉六角钢,高强度六角钢公司推荐

2025年11月冷拉/冷拔六角钢厂家推荐排行榜 行业背景分析 冷拉/冷拔六角钢作为重要的工业基础材料,在机械制造、汽车工业、电梯制造等领域发挥着关键作用。随着制造业向高质量方向发展,市场对冷拉六角钢、冷拔六角钢的…

2025 年 11 月氢氧化镁厂家推荐排行榜,矿石氢氧化镁,水镁石氢氧化镁,阻燃剂氢氧化镁,改性氢氧化镁公司推荐

2025年11月氢氧化镁厂家推荐排行榜:矿石氢氧化镁、水镁石氢氧化镁、阻燃剂氢氧化镁、改性氢氧化镁公司推荐 行业背景与发展现状 氢氧化镁作为一种重要的无机化工产品,在阻燃材料、环保处理、医药制备等领域具有广泛应…