放肆青春的博客
首页
前端
算法
网络
面试
技术
后端
运维
杂项
数据库
工具
网址
电脑
个人
文章
  • 分类
  • 标签
  • 归档
github (opens new window)
gitee (opens new window)

放肆青春

一个前端菜鸟的技术成长之路
首页
前端
算法
网络
面试
技术
后端
运维
杂项
数据库
工具
网址
电脑
个人
文章
  • 分类
  • 标签
  • 归档
github (opens new window)
gitee (opens new window)
  • 算法基础

    • 数据结构和算法
    • 算法blog
    • 算法基础
    • 算法思维
  • 算法汇总

    • 常见算法题
    • 穷举算法(枚举算法)
    • 递归
    • 二分法
    • 双指针

      • 双指针
      • 双指针算法题
      • 滑动窗口
      • 滑动窗口算法题
    • 回溯法

      • 回溯法
        • 回溯法
          • 回溯法三个关键点
          • 回溯法算法框架
          • 解决问题
      • 回溯法算法题
    • 分治算法
    • 贪心算法

      • 贪心算法
      • 贪心算法题
    • 动态规划

      • 动态规划
      • 动态规划算法题
  • 排序算法

    • 排序算法
    • 1. 冒泡排序
    • 2. 选择排序
    • 3. 插入排序
    • 4. 希尔排序
    • 5. 归并排序
    • 6. 快速排序
    • 7. 堆排序
    • 8. 计数排序
    • 9. 桶排序
    • 10. 基数排序
  • 数据结构

    • 数组

      • 数组概览
      • 数组算法题
    • 字符串

      • 字符串概览
      • 字符串算法题
    • 树

      • 树概览
      • 树算法题
    • 链表

      • 链表概览
      • 双向链表
      • 链表算法题
    • 队列

      • 队列概览
      • 队列算法题
    • 堆

      • 堆概览
      • 堆算法题
    • 散列表(哈希表)

      • 散列表(哈希表)概览
      • 散列表(哈希表)算法题
    • 栈

      • 栈概览
      • 栈算法题
    • 图

      • 图概览
      • 图算法题
  • algorithm
放肆青春
2021-03-24

回溯法

# 回溯法

回溯法是一种选优搜索法又称为试探法

按选优条件向前搜索以达到目标但当探索到某一步时发现原先选择并不优或达不到目标就退回一步,重新选择这种走不通就退回再走的技术为回溯法

而满足回溯条件的某个状态的点称为回溯点

# 回溯法三个关键点

  1. 路径:也就是已经做出的选择。

  2. 选择列表:也就是你当前可以做的选择。

  3. 结束条件:也就是到达决策树底层,无法再做选择的条件。

# 回溯法算法框架

result = [];
function backtrack(路径, 选择列表) {
  if (满足结束条件) {
    result.add(路径);
    return;
  }
  for (let i = 0; i < 选择列表的长度; i++) {
    做选择;
    backtrack(路径, 选择列表);
    撤销选择;
  }
}
1
2
3
4
5
6
7
8
9
10
11
12

# 解决问题

回溯算法能进行暴力的搜索,它解决的问题是需要暴力才能解决的问题, 以下列举回溯能解决的六种常见问题类型。

image

  1. 组合问题

比如请给出数字[1, 2, 3, 4]两两组合的每种可能性,结果就是[12, 13, 14, 23, 24, 34],因为 23 和 32 是一个组合,所以忽略 32。如果你说这个很简答了,使用循环也可以解决,那题目条件换一下,给出数字 1 - 20 之间每 12 种组合的可能性,这时遍历就不好使了。

  1. 排列问题

给出[1, 2, 3]所有的全排列的可能性,结果就是[123, 132, 213, 231, 312, 321]。

  1. 子集问题

给出数字[1, 2, 3]所有的子集(幂集)的可能性,结果就是[[], [1], [1,2], [1,2,3], [1,3], [2], [2,3], [3]]。

  1. 分割问题

给出一个数字字符串 25525511135,返回它所有组成 IP 地址格式的可能,结果就是["255.255.11.135", "255.255.111.35"]。

  1. floodFill 填色问题

问题类型参考力扣 200 岛屿和 547 朋友圈,之后详细介绍。

  1. 棋盘问题

类型参考解数独和 8 皇后问题,之后详细介绍。

上述的六种类型看着区别可能挺大,其实它们都是树型问题这个类型,这个到具体问题讲解时再说明其中的道道。

更新时间: 2/10/2022, 7:21:32 PM
滑动窗口算法题
回溯法算法题

← 滑动窗口算法题 回溯法算法题→

最近更新
01
前端权限管理
02-24
02
vue2指令
02-24
03
vue2 hook
02-24
更多文章>
Theme by Vdoing | Copyright © 2019-2022 放肆青春
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式