第5章-回溯法-New剖析.ppt





《第5章-回溯法-New剖析.ppt》由会员分享,可在线阅读,更多相关《第5章-回溯法-New剖析.ppt(86页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第5章章回溯法回溯法第第5章章回溯法回溯法引入问题引入问题回溯是重要的算法之一回溯是重要的算法之一 要求找到一组解,或要求找到一个满足某些限制的要求找到一组解,或要求找到一个满足某些限制的最优解。最优解。-通过彻底的搜寻方法来解决。通过彻底的搜寻方法来解决。*彻底搜寻的运算量很大,有时大到计算机承受彻底搜寻的运算量很大,有时大到计算机承受不了的程度。不了的程度。*彻底的搜寻,以进行大量的比较、舍弃、运算彻底的搜寻,以进行大量的比较、舍弃、运算时间为代价。因此,用穷举法解某些实际问题是不时间为代价。因此,用穷举法解某些实际问题是不现实的现实的.-运用回溯法可以大大削减实际的搜寻。例如,迷运用回
2、溯法可以大大削减实际的搜寻。例如,迷宫问题,八皇后问题,骑士周游世界问题。宫问题,八皇后问题,骑士周游世界问题。第第5章章回溯法回溯法引入问题引入问题关键:找到回溯的条件。关键:找到回溯的条件。算法思想:算法思想:通过对问题的分析,找出一个解决问题的线通过对问题的分析,找出一个解决问题的线索,然后沿着这个线索往前摸索,若摸索成功,索,然后沿着这个线索往前摸索,若摸索成功,就得到解,若摸索失败,就逐步往回退,换别的就得到解,若摸索失败,就逐步往回退,换别的路途再往前摸索。路途再往前摸索。事实上是广度与深度搜寻结合的搜寻,深度事实上是广度与深度搜寻结合的搜寻,深度搜寻过程中遇到条件不满足,则退回上
3、一层,在搜寻过程中遇到条件不满足,则退回上一层,在每一层上也进行全面的搜寻。每一层上也进行全面的搜寻。第第5章章回溯法回溯法回溯法的基本思想回溯法的基本思想回溯法是带优化的穷举法。回溯法是带优化的穷举法。回溯法的基本思想:在一棵含有问题全部可回溯法的基本思想:在一棵含有问题全部可能解的状态空间树上进行深度优先搜寻,解为叶能解的状态空间树上进行深度优先搜寻,解为叶子结点。搜寻过程中,每到达一个结点时,则推子结点。搜寻过程中,每到达一个结点时,则推断该结点为根的子树是否含有问题的解,假如可断该结点为根的子树是否含有问题的解,假如可以确定该子树中不含有问题的解,则放弃对该子以确定该子树中不含有问题的
4、解,则放弃对该子树的搜寻,退回到上层父结点,接着下一步深度树的搜寻,退回到上层父结点,接着下一步深度优先搜寻过程。优先搜寻过程。在回溯法中,并不是先构造出整棵状态空间在回溯法中,并不是先构造出整棵状态空间树,再进行搜寻,而是在搜寻过程中逐步构造出树,再进行搜寻,而是在搜寻过程中逐步构造出状态空间树,即边搜寻,边构造。状态空间树,即边搜寻,边构造。第第5章章回溯法回溯法回溯法是一个既带有系统性又带有跳动性的搜回溯法是一个既带有系统性又带有跳动性的搜寻算法。寻算法。它在包含问题的全部解的解空间树中,依据深它在包含问题的全部解的解空间树中,依据深度优先的策略,从根结点动身搜寻解空间树。度优先的策略,
5、从根结点动身搜寻解空间树。算法搜寻至解空间树的任一结点时,总是先推算法搜寻至解空间树的任一结点时,总是先推断该结点是否确定不包含问题的解。断该结点是否确定不包含问题的解。(1)假如确定不包含,则跳过对以该结点为根)假如确定不包含,则跳过对以该结点为根的子树的系统搜寻,逐层向其祖先结点回溯。的子树的系统搜寻,逐层向其祖先结点回溯。(2)否则,进入该子树,接着按深度优先的策)否则,进入该子树,接着按深度优先的策略进行搜寻。略进行搜寻。回溯法在用来求问题的全部解时,要回溯到根,回溯法在用来求问题的全部解时,要回溯到根,且根结点的全部子树都已被搜寻遍才结束。且根结点的全部子树都已被搜寻遍才结束。回溯法
6、在用来求问题的任一解时,只要搜寻到回溯法在用来求问题的任一解时,只要搜寻到问题的一个解就可以结束。问题的一个解就可以结束。第第5章章回溯法回溯法ABCDEFGHIJKLMNO11100011110000例如,对于有n种可选物品的0-1背包问题,其解空间由长度为n的0-1向量组成。以3件物品实例第第5章章回溯法回溯法n扩展结点:一个正在产生儿子的结点称扩展结点:一个正在产生儿子的结点称为扩展结点为扩展结点n活结点:一个自身已生成但其儿子还没活结点:一个自身已生成但其儿子还没有全部生成的结点称做活结点有全部生成的结点称做活结点n死结点:一个全部儿子已经产生的结点死结点:一个全部儿子已经产生的结点称
7、做死结点称做死结点第第5章章回溯法回溯法从起先结点(根结点)动身,以深度优先的方式搜从起先结点(根结点)动身,以深度优先的方式搜寻整个解空间。这个起先结点寻整个解空间。这个起先结点-活结点,同时也成为活结点,同时也成为当前的扩展结点。当前的扩展结点。在当前的扩展结点处,搜寻向纵深方向移至一个新在当前的扩展结点处,搜寻向纵深方向移至一个新结点。这个新结点就成为一个新的活结点,并成为当结点。这个新结点就成为一个新的活结点,并成为当前扩展结点。前扩展结点。假如在当前的扩展结点处不能再向纵深方向移动,假如在当前的扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。此时,应往回移动则当前扩展结点
8、就成为死结点。此时,应往回移动(回溯)至最近的一个活结点处,并使这个活结点成(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点。为当前的扩展结点。回溯法即以这种工作方式递归地在解空间中搜寻,回溯法即以这种工作方式递归地在解空间中搜寻,直至找到所要求的解或解空间中已没有活结点时为止。直至找到所要求的解或解空间中已没有活结点时为止。第第5章章回溯法回溯法n深度优先的问题状态生成法:假如对一个扩展深度优先的问题状态生成法:假如对一个扩展结点结点R,一旦产生了它的一个儿子,一旦产生了它的一个儿子C,就把,就把C当当做新的扩展结点。在完成对子树做新的扩展结点。在完成对子树C(以(以C为根的为
9、根的子树)的穷尽搜寻之后,将子树)的穷尽搜寻之后,将R重新变成扩展结重新变成扩展结点,接着生成点,接着生成R的下一个儿子(假如存在)的下一个儿子(假如存在)n宽度优先的问题状态生成法:在一个扩展结点宽度优先的问题状态生成法:在一个扩展结点变成死结点之前,它始终是扩展结点变成死结点之前,它始终是扩展结点n回溯法:为了避开生成那些不行能产生最佳解回溯法:为了避开生成那些不行能产生最佳解的问题状态,要不断地利用限界函数的问题状态,要不断地利用限界函数(boundingfunction)来剔除那些事实上不行来剔除那些事实上不行能产生所需解的活结点,以削减问题的计算量。能产生所需解的活结点,以削减问题的
10、计算量。具有限界函数的深度优先生成法称为回溯法。具有限界函数的深度优先生成法称为回溯法。第第5章章回溯法回溯法示例示例1 0-11 0-1背包问题背包问题n=3,C=30,w=16,15,15,v=45,25,25ACr=C=30,V=0LNMBw1=16,v1=45Cr=14,V=45G Cr=30,V=0CCrw2不可行解ECr45x=(0,1,1)Hw2=15,v2=25Cr=15,V=25J2550不是最优解示例示例1 0-11 0-1背包问题背包问题起先时,起先时,Cr=C=30,V=0,A为唯一活结点,也是当为唯一活结点,也是当前扩展结点前扩展结点扩展扩展A,先到达,先到达B结点结
11、点Cr=Cr-w1=14,V=V+v1=45;此时;此时A、B为活结为活结点,点,B成为当前扩展结点;扩展成为当前扩展结点;扩展B,先到达,先到达CCrw2,C导致一个不行行解,回溯到导致一个不行行解,回溯到B再扩展再扩展B到达到达DD可行,此时可行,此时A、B、D是活结点,是活结点,D成为新的扩展结成为新的扩展结点;扩展点;扩展D,先到达,先到达ECr45,皆得到一个可行解,皆得到一个可行解x=(0,1,1),V=50I不行扩展,成为死结点,返回到不行扩展,成为死结点,返回到H再扩展再扩展H到达到达JJ是叶结点,且是叶结点,且2550,不是最优解,不是最优解J不行扩展,成为死结点,返回到不行
12、扩展,成为死结点,返回到HH没有可扩展结点,成为死结点,返回到没有可扩展结点,成为死结点,返回到G再扩展再扩展G到达到达LCr=30,V=0,活结点为,活结点为A、G、L,L为当前扩展结点为当前扩展结点扩展扩展L,先到达,先到达M,M是叶结点,且是叶结点,且2550,不是最优解,又,不是最优解,又M不行扩展,返回不行扩展,返回到到L再扩展再扩展L到达到达N,N是叶结点,且是叶结点,且0n)output(x);/当搜寻到叶结点,输出可行解当搜寻到叶结点,输出可行解 else for(int i=f(n,t);in)output(x);elsefor(inti=0;in)output(x);els
13、efor(inti=t;i=n;i+)swap(xt,xi);if(legal(t)backtrack(t+1);swap(xt,xi);第第5章章回溯法回溯法八皇后问题是一个古老而著名的问题。该问题是十九是一个古老而著名的问题。该问题是十九世纪著名的数学家高斯世纪著名的数学家高斯1850年提出。年提出。在在8X8格的国际象棋上摆放八个皇后,使格的国际象棋上摆放八个皇后,使其不能相互攻击,即随意两个皇后都不能其不能相互攻击,即随意两个皇后都不能处于同一行、同一列或同一斜线上,问有处于同一行、同一列或同一斜线上,问有多少种摆法。多少种摆法。高斯认为有高斯认为有76种方案。种方案。1854年在柏林
14、的年在柏林的象棋杂志上不同的作者发表了象棋杂志上不同的作者发表了40种不同的种不同的解,后来有人用图论的方法解出解,后来有人用图论的方法解出92种结果。种结果。第第5章章回溯法回溯法N N皇后问题皇后问题问题描述问题描述在在*的棋盘上,放置个皇后,要求每的棋盘上,放置个皇后,要求每一横行,每一列,每一对角线上均只能放置一个皇后,一横行,每一列,每一对角线上均只能放置一个皇后,求可能的方案及方案数。求可能的方案及方案数。问题的状态即棋盘的布局状态,状态空间树的根为空棋问题的状态即棋盘的布局状态,状态空间树的根为空棋盘,每个布局的下一步可能布局为该布局结点的子结盘,每个布局的下一步可能布局为该布局
15、结点的子结点;点;随意两个王后不放在同一行或同一列或同一斜线。因此随意两个王后不放在同一行或同一列或同一斜线。因此为了简化状态空间树,接受逐行布局的方式,即每个为了简化状态空间树,接受逐行布局的方式,即每个布局有布局有n个子结点;个子结点;第第5章章回溯法回溯法N皇后问题皇后问题一、回溯过程分析:一、回溯过程分析:1、从空棋盘起,逐行放置棋子。、从空棋盘起,逐行放置棋子。2、每在一个布局中放下一个棋子,即推演、每在一个布局中放下一个棋子,即推演到一个新的布局。到一个新的布局。3、假如当前行上没有可合法放置棋子的位、假如当前行上没有可合法放置棋子的位置,则回溯到上一行,重新布放上一行的置,则回溯
16、到上一行,重新布放上一行的棋子。棋子。第第5章章回溯法回溯法N皇后问题皇后问题第第5章章回溯法回溯法N皇后问题皇后问题二、存储结构二、存储结构(1)二维数组二维数组ANN存储皇后位置存储皇后位置若第若第i行第行第j列放列放有皇后有皇后,则则Aij为非为非0值值,否则否则值为值为0。(2)一维数组一维数组Mk、Lk、Rk分别表示竖列、分别表示竖列、左斜线、右斜线是否放有棋子左斜线、右斜线是否放有棋子,有则值为有则值为1,否否则值为则值为0。第第5章章回溯法回溯法ji01230123M0M1M2M3第第5章章回溯法回溯法ji01230123k值和皇后位置坐值和皇后位置坐标标i,j的关联?的关联?k
17、=i+jk=02*(N-1)第第5章章回溯法回溯法ji01230123k值和皇后位置坐值和皇后位置坐标标i,j的关联?的关联?k=i-jk会出现负值会出现负值k=i-j+Nk=12*(N+1)右右第第5章章回溯法回溯法ji01230L0,R4L1,R3L2,R2L3,R11L1,R5L2,R4L3,R3L4,R22L2,R6L3,R5L4,R4L5,R33L3,R7L4,R6L5,R5L6,R4M0M1M2M3Mk(k=j)Lk(k=i+j)Rk(k=i-j+N)第第5章章回溯法回溯法三、算法描述三、算法描述初始化初始化for(某一行的每个位置某一行的每个位置)if(平安平安)放皇后放皇后;i
18、f(已到最终一行已到最终一行)输出输出;else摸索下一行摸索下一行;去皇后去皇后;N皇后问题皇后问题平安算法:平安算法:!Mj&!Ri-j+N&!Li+j;放皇后:放皇后:Aij=Mj=Ri-j+N=Li+j=1;去皇后:去皇后:Aij=Mj=Ri-j+N=Li+j=0;第第5章章回溯法回溯法#defineN4/*N为皇后个数为皇后个数*/intcount=0;intMN=0,L2*N=0,R2*N=0;intANN=0;/*皇后位置皇后位置*/voidprint(intANN);intmytry(inti,intMN,intL2*N,intR2*N,intANN);voidmain()in
19、tn=mytry(0,M,L,R,A);/代表从代表从0行起先摸索行起先摸索cout“ncount=”n;/n可行解数目可行解数目/*摸索每一行皇后的位置摸索每一行皇后的位置*/intmytry(inti,intMN,intL2*N,intR2*N,intANN)for(intj=0;jN;j+)/放置在放置在i行行j列列if(!Mj&!Li-j+N&!Ri+j)/平安检查平安检查Aij=i+1;/放皇后放皇后Mj=Li-j+N=Ri+j=1;if(i=N-1)print(A);coutendl;count+;elsemytry(i+1,M,L,R,A);/摸索下一行摸索下一行Aij=0;/去
20、皇后去皇后Mj=Li-j+N=Ri+j=0;returncount;第第5章章回溯法回溯法voidprint(intANN)/*输出输出*/inti,j;for(i=0;iN;i+)for(j=0;jN;j+)coutAij;coutendl;第第5章章回溯法回溯法图的图的m着色问题着色问题给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色。这个问题是图的m可着色判定问题。若一个图最少须要m种颜色才能使图中每条边连接的2个顶点着不同颜色,则称这个数m为该图的色数。求一个图的色数m的问题称为图的m可着色优化问题。把
21、n个板块抽象为一个图的n个顶点第第5章章回溯法回溯法图的着色问题是由地图的着色问题引申而来的,用m种颜色为地图着色,使得地图上的每一个区域着一种颜色,且相邻区域颜色不同。一、产生背景一、产生背景第第5章章回溯法回溯法二、问题描述二、问题描述给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色。假如有则称这个图是m可着色,否则称这个图不是m可着色。若一个图最少须要k种颜色才能使图中每条边连接的2个顶点着不同颜色,则称这个数k为该图的色数。第第5章章回溯法回溯法三、算法设计三、算法设计输入:颜色种类m输出:假如这个图不
22、是m可着色,给出否定回答;假如这个图是m可着色的,找出全部不同的着色法。思考?思考?如何将给定的如何将给定的无向图存储在无向图存储在计算机中?计算机中?第第5章章回溯法回溯法1423可以用以下邻接矩阵来表示 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 1 1邻接矩阵中通常用二维数组来存放边之间的关系,用一维邻接矩阵中通常用二维数组来存放边之间的关系,用一维数组来存放顶点的信息。所以在接下来的求解问题中我们数组来存放顶点的信息。所以在接下来的求解问题中我们将用到二维数组将用到二维数组a来存放两边是否相邻,来存放两边是否相邻,用一维数组用一维数组x来
23、来存放每个顶点的颜色存放每个顶点的颜色;xi=j表示第表示第i个节点图第个节点图第j中颜色中颜色。5第第5章章回溯法回溯法我们可以把问题简化为3个点来分析,现给定如下图,怎样求解呢?123该图的色数是多少?怎样用解空间树来表示呢?第第5章章回溯法回溯法由图可知,对于每一个顶点可选的颜色可以有3种不同的选择,所以每一个节点有3个儿子节点,有4层。第第5章章回溯法回溯法推断条件是什么?推断条件是什么?新加入的节点t取某一种颜色i时,依次和上层的每一个节点j(jt)比较。假如atj=1并且xt=xj=i,那么它是不行着色的。int OK(int t)int j;for(j=1;jt;j+)if(at
24、j=1&xj=xt)return 0;return 1;第第5章章回溯法回溯法模拟演示t=1t=2t=3t=4第第5章章回溯法回溯法void Backtrace(int t,int m)当前节点颜色的种类当搜寻的当前节点tN),即可输出一种方案for(i=1;iN)sum+;printf(第%d种方案:n,sum);for(i=1;i=N;i+)printf(%d,xi);第第5章章回溯法回溯法四、程序代码#include#include#define N 3/图中节点的个数图中节点的个数int aN+1N+1=0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,1,;/邻接矩阵邻接矩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 回溯 New 剖析

限制150内