分支限界法实现最优装载c++_第五章 回溯法(Backtrack)

b2cb6a0f13a0ea30d250f9b9e14bc4f6.png

晓强Deep Learning的读书分享会,先从这里开始,从大学开始。大家好,我是晓强,计算机科学与技术专业研究生在读。我会不定时的更新我的文章,内容可能包括深度学习入门知识,具体包括CV,NLP方向的基础知识和学习的论文;网络表征学习的相关论文解读。当然我每天的读书心得也会分享给大家,可能涉及我们生活各个方面的书籍。我也会不定时回答大家的问题与大家一同进步,共同交流,互相监督,结交更多的朋友。希望大家多留言,多交流,多多关照。我在这里等你一同学习,如果需要相关资料也可以私信我,进入我们的群大家庭。

【晓白】今天学习效率并不如昨天高,但是我们还是要坚持下去的,努力终会有收获。今天上午抽时间写了一篇回溯法的文章。希望大家点赞,关注,支持一下。谢谢精神合伙人的支持和鼓励。如果有准备秋招的同学,也可以来看一下,对大家很有帮助。有任何疑问可以私信,获得我们大家庭的联系方式,多多沟通,共同进步。

第五章 回溯法(Backtrack)

回溯法有“通用的解题法”之称。

回溯法可以求出问题的所有解或任一解。

回溯法的基本思想:

在解空间树中,按照深度优先的策略,从根出发进行搜索。搜索每到达解空间树的一个结点,总是先判断以该结点为根的子树是否肯定不包含问题的解。

如果不包含,则跳过对该子树,一层一层地向它的祖先回溯,直到遇上一个还有未被搜索过的儿子的结点,才转向该结点的一个未曾搜索过的儿子结点,继续搜索;

否则,进入该子树,继续按深优先的策略进行搜索

一、回溯法解题过程

1.问题的解空间

应用回溯法解问题时,首先应明确定义问题的解空间。问题的解空间应至少包含问题的一个(最优)解。

例:当n=3时,有n种可选物品的0-1背包问题的解空间:

{(0,0,0), (0,1,0), (0,0,1), (1,0,0), (0,1,1), (1,0,1), (1,1,0), (1,1,1)}

2. 解空间树 通常把解空间组织成解空间树。

例如:对于n=3时的0-1背包问题,其解空间用一棵完全二叉树表示,如下图所示。

8b6576ebcd66ab6cf6be7abc2af78cdc.png

3. 搜索解空间树的过程

例1: n=3时的0-1背包问题,W={16,15,15},p={45,25,25},C=30。在其解空间树上搜索最优解的过程如下图所示。

f0c27f1aa903e85167c7f33f9907b6de.png

例2:旅行售货员问题:某售货员要到若干城市推销商 品,已知各城市间的路程(或旅费)。他要选一条从驻地出发,经过每个城市一遍,最后回到驻地的路线使总的路程(总的旅费)最小

e02cdb1c82217503d5ae880064f8a4c8.png

379c8979862ef4a7673abe51ef42373d.png

综上所述,回溯法解题包含以下步骤:

(1) 针对所给的问题,定义问题的解空间;

(2) 确定易于搜索的解空间结构—解空间树;

(3) 以深度优先的方式搜索解空间树,并在搜索过程中用剪枝函数(约束函数或限界函数)避免无效搜索。

例1和例2中的两棵解空间树是回溯法解题时常遇到的两类典型的解空间树。当所给的问题是从n个元素的集合S中找出满足某种性质的子集时,相应的解空间树称为子集树。

例如,n个物品的0-1背包问题相应的解空间树称为子集树。子集树通常有2n个叶结点,其结点总个数为2n+1-1。 遍历子集树的任何算法均需Ω(2n)的计算时间。

当所给的问题确定n个元素满足某种性质的排列时,相应的解空间树称为排列树。 例如,旅行售货员问题相应的解空间树称为排列树。排列树通常有n!个叶结点。遍历子集树的任何算法均需Ω(n!)的计算时间。

7167f9c32ef54f96cd3914e875fd1ff4.png

二、n后问题

1. 问题描述

n后问题要求在一个n*n格的棋盘上放置n个皇后,使得她们彼此不受攻击。一个皇后可以攻击与之在同一行或同一斜线上的其他任何棋子。因此,n后问题等价于:任何两个皇后不能在同行、同列、同一斜线上。

例子:四皇后问题

给4*4棋盘的行和列分别从左到右和从上到下编号为1,2,3,4,同时也给4个皇后分别编号为1,2,3,4。由于要求不同的皇后不能放在同一行,不失一般性,可设皇后i只放在第i行。

e71ca719738d47ee97615d5bb5118db5.png

2. 算法设计

对n后问题,可用n元组x[1:n]表示它的解。其中,x[i]表示皇后i放在棋盘的第i行的第x[i]列。

若2个皇后放置的位置分别是(i,x[i])和(k,x[k]),则约束条件为:

x[i]≠x[k] (不在同一列)

x[i]-i≠ x[k]-k ,

i+ x[i] ≠k+ x[k] (不在同一斜线)

即|i- k|≠| x[i] - x[k] |

用回溯法解n后问题时,可以用一棵完全n叉树来表示其解空间。用可行性约束函数Place可剪去不满足行、列和斜线约束的子树。

54885da9d6f7757d90e7c0815d88a160.png

用回溯法解题的一个显著特征:

问题的解空间是在搜索过程中动态生成的。在任何时刻,算法只保存从根结点到当前扩展结点的路径。若解空间树中从根到叶的最长路径长度为h(n),则回溯法所需的计算空间通常为O(h(n))。

三、图的m着色问题

1.问题描述

给定一个无向连通图G和m种不同的颜色。用这m种颜色为图G的各顶点着色,每个顶点着一种颜色,是否有使得G中任何一条边的2个顶点着有不同颜色的着色法。这个问题就是一个图的m可着色判定问题。

若一个图最少需要m种颜色才能使图中任何一条边连接的2个顶点着有不同颜色,则称这个数m为该图的色数。求一个图的色数m的问题称为图的m可着色优化问题。

著名的平面图的4色猜想 -----图的m可着色判定问题的特殊情形。

4色定理-----四色猜想于1976年由三个美国人依靠计算机做出证明。

显式存储整个解空间则需要O(2 h(n))。

2.算法设计

问题: 给定一个连通图G=(V,E)和m种颜色,如果这个图不是m可着色的,就回答“no”, 如果这个图是m可着色的,则要找出所有不同的着色方法。

本问题除了回溯法外,目前还没什么更好的方法。

f41f064f1d74d0aaf56535d3e477cca3.png

94c16343b05a5e5bda77973d4d66b17b.png

01ff7ea8907141723f53499d5f698f48.png

7a03b7527022b67ae763e6d8e815e502.png

四、批处理调度问题

1.问题描述

给定n个作业的集合J=(J1,J2,…,Jn)。每个作业Ji都有两项任务要分别在2台机器上完成。每个作业必须先由机器1处理,然后再由机器2处理。

作业Ji需要机器j的处理时间为tij,i=1,2,…,n;j=1,2。

设Fij是作业i在机器j上完成处理的时间。则所有作业在机器2上完成处理的时间和 称为该作业调度的完成时间和。

批处理作业调度问题要求:对于给定的n个作业,制定一个最佳作业调度方案,使其完成时间和达到最小。

可以证明:批处理调度问题存在最佳作业调度使得机器1和机器2上作业以相同次序完成。

例: n=3

4d444d3db17207205b82af4d8053a368.png

328002a8b424b48c8340860cf6fa6a7d.png

1a800724db46ba0d00804f24c51a80ec.png

aa2f73d42ba3f946e615a31f648bbfaf.png

e40536c82f1f335db107934c82da907d.png

25098eb947f76a62a9856b80b8dc7720.png

328002a8b424b48c8340860cf6fa6a7d.png

151485715b52ca31147c824eb4fe7e6a.png

批处理回溯算法:

88c054b327be7d89ea693d0e486f238a.png

04466d42e23f8e25cbc5c96787beb872.png

算法分析 Backtrack算法在每个结点处耗费O(1)时间,所以在最坏情况下,整个算法的计算时间复杂性为O(n!)。

五、0-1背包问题

对于n=3时的0-1背包问题,其解空间用一棵完全二叉树表示,如下图所示。

02fd8ce64e2c6051e8e23c38df962628.png

例: n=3时的0-1背包问题,W={16,15,15},p={45,25,25},C=30。在其解空间树上搜索最优解的过程如下图所示。

bcf32b8eb184ee56920dc1c59785fd81.png

今天算法设计与分析的回溯法更新完毕。多多关注我,看下方的更多文章,连接如下:

晓强DL:图像处理必读论文之AlexNet​zhuanlan.zhihu.com
晓强DL:图像处理必读论文之二:VGG网络​zhuanlan.zhihu.com
e0bb69f65a49fd03d5035fe640fad13e.png
晓强DL:第四章 贪心算法(Greedy Algorithms)​zhuanlan.zhihu.com
e0bb69f65a49fd03d5035fe640fad13e.png
晓强DL:第三章 动态规划(Dynamic Programming )​zhuanlan.zhihu.com
e0bb69f65a49fd03d5035fe640fad13e.png
晓强DL:第二章 递归与分治​zhuanlan.zhihu.com
e0bb69f65a49fd03d5035fe640fad13e.png
晓强DL:计算机算法设计与分析第一章 算法概述​zhuanlan.zhihu.com
e0bb69f65a49fd03d5035fe640fad13e.png
晓强DL:Opencv图像处理(一)​zhuanlan.zhihu.com
晓强DL:OpenCV图像处理(二)​zhuanlan.zhihu.com
晓强DL:Opencv图像处理(三)​zhuanlan.zhihu.com
晓强DL:Opencv图像处理 (四)​zhuanlan.zhihu.com
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值