首页 > 编程语言 >刷题总结——回溯算法

刷题总结——回溯算法

时间:2024-10-26 18:59:20浏览次数:6  
标签:剪枝 hash 算法 子集 回溯 组合型 节点 刷题

总论

  • 增量构造答案
  • 关注边界条件的逻辑
    • 当前操作?(选/不选,枚举选哪一个)
    • 子问题?
    • 下一个子问题?
  • 用什么数据结构保存搜索路径?
  • 时间复杂度计算:搜索树节点数*生成答案需要的时间

题目分类

可以分成子集型、排列型和组合型三种:

回溯问题 时间复杂度O() 解法
子集 LC78 n x 2^n 记录下标i+1
子集 II(有重复) LC90 n x 2^n 同上+hash
排列 面试题08.07 n x n! Vis数组管理或者swap下标
排列II(有重复) 面试题08.08 n x n! 同上+hash
组合型 括号生成LC22 C(2n,n) 剪枝+叶子节点push
  • 使用hash可以理解为一种剪枝方式,主要是去掉重复元素
  • 组合型需要对普通回溯结果根据预设条件进行剪枝

子集型

从执行和答案两个角度考虑问题:

  • 选与不选是从叶子节点的角度考虑,在叶子节点再push答案
  • 枚举选哪个是从回溯过程的角度考虑,需要考虑下标管理,从更大的下标中构造子集

注意使用位运算的迭代思路:不回溯,直接使用2^n位运算计算出上限,然后for循环变量作为mask依次处理

组合型

  • 从n个数字中选择k个数的组合,可以认为是寻找路径长度固定为k的子集
  • 有额外剪枝的可能性,因为选择有顺序(组合保证了顺序的存在,顺序起到了去重的效果)
    • 组合: 每次选的范围缩小,都在0, i-1内,人为规定的逆序
    • 括号生成:状态改变时候的性质
  • 时间复杂度=路径长度X叶子个数,即k X C(n, k)

排列型

可以重复,但顺序不同,因此需要有一个结构存储接下来还能保存哪些数:

  • path:记录搜索路径
  • 集合s:hash记录未选的数字/布尔数组

全排列O(n*n!): 节点路径长度x叶子节点个数

注意全排列可以使用交换法实现,比较巧妙的处理

参考

  1. https://www.bilibili.com/video/BV1xG4y1F7nC/?vd_source=c80c62eac86a4ba033ab112349bbdd9f
  2. https://www.bilibili.com/video/BV1mG4y1A7Gu/?vd_source=c80c62eac86a4ba033ab112349bbdd9f&spm_id_from=333.788.videopod.sections
  3. https://leetcode.cn/problems/permutation-i-lcci/solutions/406850/quan-pai-lie-jiao-huan-fa-qing-xi-tu-shi-by-chen-k/?envType=problem-list-v2&envId=xb9lfcwi

标签:剪枝,hash,算法,子集,回溯,组合型,节点,刷题
From: https://www.cnblogs.com/hesun/p/18504357

相关文章

  • 算法之树状数组详解
    树状数组树状数组(BinaryIndexedTree,简称BIT),也被称为Fenwick树,是一种用于处理数组问题的高效数据结构。它特别适合解决涉及区间查询和更新的问题,尤其是当需要频繁地计算数组的前缀和时。树状数组的核心思想是利用二进制表示法(lowbit函数)来快速定位数组中的区间,并在O(lo......
  • 【路径规划】基于蚁群算法的二维机器人路径规划,二维珊格地图路径规划
    摘要本文研究了基于蚁群算法的二维机器人路径规划问题,利用蚁群算法优化机器人在二维栅格地图中的最优路径。蚁群算法通过仿生学模拟蚂蚁寻找食物的过程,在障碍物密集的栅格地图中寻找出最短、最优的路径。实验结果表明,该算法能够有效地避开障碍物,并通过多次迭代逐步优化路径,......
  • 【无人机设计与控制】基于Astar算法无人机路径规划,优化路径平滑
    摘要本文提出了一种基于A算法的无人机路径规划方法,并通过路径平滑优化提升路径的可行性和安全性。传统A算法在生成路径时,常因路径节点分布不规则导致路径不平滑,影响无人机的飞行效率和安全性。本文通过引入贝塞尔曲线对A*算法生成的路径进行优化,使其更加平滑和符合无人机的......
  • 【算法优化】混合策略改进的蝴蝶优化算法
    摘要蝴蝶优化算法(ButterflyOptimizationAlgorithm,BOA)是一种新兴的智能优化算法,其灵感来自蝴蝶的觅食行为。本文基于经典BOA,通过引入混合策略进行改进,从而提高其在全局寻优和局部搜索中的性能。实验结果表明,改进的蝴蝶优化算法(IBOA)在处理复杂多模态函数优化问题时表......
  • 【源码+论文】Java毕业设计:基于SpringBoot协同过滤算法的汽车推荐网站(Mysql数据库)
    ✅更多源码|课设......
  • 数据结构与算法——顺序栈的实现
    数据结构栈——一列数据,表尾入栈,表尾出栈,类似于子弹弹匣,压入子弹和拿出子弹都是从最上方进出。结构体structStack{ int*arr; intcapacity;//数组容量 inttop;//存储栈顶元素的下标};初始化栈intInitStack(structStack*stack){ stack->arr=......
  • 初识算法 · 二分查找(4)
    目录前言:寻找峰值题目解析算法原理算法编写寻找旋转排序数组中的最小值题目解析算法原理算法编写寻找缺失的数字题目解析算法原理算法编写前言:​本文的主题是二分查找,通过三道题目讲解,一道是寻找峰值,一道是搜索旋转排序数组的最小值,一道是0-n-1中缺失的数字......
  • 如何将遗传算法与强化学习结合
    首先,说一下,在机器学习领域(人工智能领域),神经网络和遗传算法一直是互相替代的关系,虽然也有过短暂的蜜月期(使用进化算法优化或初始化神经网络参数),但是总体说来,一般神经网络发展受限的情况下遗传算法方向的研究就会受重视,而神经网络发展好的时候(如最近10年-20年),那么遗传算法这样的进化......
  • 100种算法【Python版】第10篇——深度优先搜索
    本文目录1深度优先搜索2示例说明:迷宫路径查找2.1问题描述2.2DFS解决逻辑2.3python代码3算法应用3.1数独问题3.1.1DFS求解逻辑3.1.2python代码3.2单词搜索3.2.1python代码3.2.2代码逻辑4总结4.1优点4.2缺点1深度......
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21
    计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21目录文章目录计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21目录1.TheFairLanguageModelParadox摘要研究背景问题与挑战如何解决创新点算法模型实验效果重要数据与结论推荐阅......