[第五章]回溯法

  • 遍历、退回、剪枝

算法框架

问题的解空间

基本思想

  1. 针对问题,定义解空间
  1. 确定易于搜索的解空间结构
  1. 深度优先搜索解空间,避免无效搜索
常用剪枝函数:
  • 约束函数在扩展结点处减去不满足约束的子树
  • 限制函数,减去得不到最优解

生成问题状态的基本方法

  • 扩展结点:正在生成儿子
  • 活结点:已经生成但是儿子没有全部生成
  • 死结点:所有儿子已经产生
  • 深搜:
  • 宽搜
  • 回溯:避免不可能产生解

递归回溯

迭代回溯

子集树与排列

  • 框架
  • 子集问题:n个元素要么选要么不选
  • 存0、1
  • n*2^n
  • 排列问题
    • 存下标
      n!

装载问题

  • 问题:n个货物,m个船每个船载重量ci和小于货物总重量,问能装满吗
  • 等价于w[i]=v[i]的01背包问题
  • 第一个尽量装满,再看第二个

解法

  • 解空间:子集树
  • 约束函数:不能超载
  • 上界函数:如果有可能更优才继续运行

批处理作业调度

符号三角形

  • 问题描述:+-构成三角形每行相差一个,左右相同下面加,不同为减

解法

  • 解向量n元组x[1:n]表示第一行
  • 可行性约束,放前方惨叫行的+个数或-个数不超过n*(n-1)/4
  • 上界函数总数n*(n-1)/2不为奇数

N皇后问题

  • n*n棋盘,n个皇后(横竖斜)互不攻击,有几种解

解法

  • 解向量:(x1…xn)
  • 显约束:x1[1,n]xZ
  • i

最大团问题

  • 完全子图:这个子图中的任意两点之间的线都相连,所有线都属于父图
  • 团:不包含在更大的完全子图中的完全子图
  • 最大团:图中最大的团
  • 空子图:不属于原图中的边
  • 独立集:不包含在更大的空子图中
  • 最大独立集:包含顶点数最多的独立集
  • U是G的最大团当且仅当U是的最大独立集

解题

  • 解空间:子集树
  • 可行性约束:当前的点和所有已选择的点都相连

图的m着色问题

  • 无向连通图

旅行售货员问题

圆排列问题

  • n个大小不等的圆,各圆与矩形底边相切

连续邮资问题

m张邮票,n种邮资,可以表示的最大范围

坏球称重

  • 原本n个质量相等的小球,但其中一个小球坏了,质量不同

解法

  • 三分n
    • 1234 | 5678 | 9 10 11 12
    • 称重1、2
      小于在1或2,大于在1或62,等于在3
  • 1678 | 59 10 11 | 12
    • 称重1、2
 
Prev
[第四章]贪心算法
Next
[第六章]分支限界
Loading...
Article List
一个NotionNext搭建的博客
数据库系统概论
大数据原理与应用
javaWeb应用开发基础教程
python
毕业设计
大数据技术综合应用
实训-航空数据系统
java面向对象程序设计
数据结构
算法分析与设计
SPARK
Python爬虫大数据采集与挖掘
云计算
概率论与数理统计
数字逻辑
计算机网络
计算机组成原理
linux
操作系统
人工智能导论
数据仓库与数据挖掘
数据可视化
大数据安全与隐私保护
c语言
C++