您好,欢迎访问三七文档
UniversityofScienceandTechnologyofChina主讲人:吕敏Email:{lvmin05@ustc.edu.cn}Spring2012,USTC算法基础UniversityofScienceandTechnologyofChina2020/3/302第十一讲回溯法内容提要:理解回溯法的深度优先搜索策略掌握用回溯法解题的算法框架子集树算法框架排列树算法框架通过应用范例学习回溯法的设计策略UniversityofScienceandTechnologyofChina3搜索算法介绍(1)穷举搜索(2)盲目搜索—深度优先(DFS)或回溯搜索(Backtracking);—广度优先搜索(BFS);—分支限界法(Branch&Bound);—博弈树搜索(α-βSearch)(3)启发式搜索—A*算法和最佳优先(Best-FirstSearch)—迭代加深的A*算法—B*,AO*,SSS*等算法—LocalSearch,GA等算法11-1方法概述UniversityofScienceandTechnologyofChina4搜索空间的三种表示:—表序表示:搜索对象用线性表数据结构表示;—显示图表示:搜索对象在搜索前就用图(树)的数据结构表示;—隐式图表示:除了初始结点,其他结点在搜索过程中动态生成。缘于搜索空间大,难以全部存储。搜索效率的思考:随机搜索—上世纪70年代中期开始,国外一些学者致力于研究随机搜索求解困难的组合问题,将随机过程引入搜索;—选择规则是随机地从可选结点中取一个,从而可以从统计角度分析搜索的平均性能;—随机搜索的一个成功例子是:判定一个很大的数是不是素数,获得了第一个多项式时间的算法。11-1方法概述UniversityofScienceandTechnologyofChina5回溯法:—回溯法是一个既带有系统性又带有跳跃性的搜索算法;—它在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树。——系统性—算法搜索至解空间树的任一结点时,判断该结点为根的子树是否包含问题的解,如果肯定不包含,则跳过以该结点为根的子树的搜索,逐层向其祖先结点回溯。否则,进入该子树,继续深度优先的策略进行搜索。——跳跃性—这种以深度优先的方式系统地搜索问题的解的算法称为回溯法,它适用于解一些组合数较大的问题。11-1方法概述UniversityofScienceandTechnologyofChina6问题的解空间—问题的解向量:回溯法希望一个问题的解能够表示成一个n元式(x1,x2,…,xn)的形式。—显约束:对分量xi的取值限定。—隐约束:为满足问题的解而对不同分量之间施加的约束。—解空间:对于问题的一个实例,解向量满足显式约束条件的所有多元组,构成了该实例的一个解空间。11-1方法概述注意:同一个问题可以有多种表示,有些表示方法更简单,所需表示的状态空间更小(存储量少,搜索方法简单)。n=3时的0-1背包问题用完全二叉树表示的解空间UniversityofScienceandTechnologyofChina711-1方法概述UniversityofScienceandTechnologyofChina8基本思想:—搜索从开始结点(根结点)出发,以深度优先搜索整个解空间。—这个开始结点成为活结点,同时也成为当前的扩展结点。在当前的扩展结点处,搜索向纵深方向移至一个新结点。这个新结点就成为新的活结点,并成为当前扩展结点。—如果在当前的扩展结点处不能再向纵深方向扩展,则当前扩展结点就成为死结点。—此时,应往回移动(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点;直到找到一个解或全部解。11-1方法概述UniversityofScienceandTechnologyofChina9基本步骤:①针对所给问题,定义问题的解空间;②确定易于搜索的解空间结构;③以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。11-1方法概述常用剪枝函数:①用约束函数在扩展结点处剪去不满足约束的子树;②用限界函数剪去得不到最优解的子树。UniversityofScienceandTechnologyofChina10二类常见的解空间树:①子集树:当所给的问题是从n个元素的集合S中找出满足某种性质的子集时,相应的解空间树称为子集树。子集树通常有2n个叶子结点,其总结点个数为2n+1-1,遍历子集树时间为Ω(2n)。如0-1背包问题,叶结点数为2n,总结点数2n+1;②排列树:当所给问题是确定n个元素满足某种性质的排列时,相应的解空间树称为排列树。排列树通常有n!个叶子结点,因此,遍历排列树需要Ω(n!)的计算时间。如TSP问题(TravelingSalesmanProblem,推销员问题),叶结点数为n!,遍历时间为Ω(n!)。11-1方法概述UniversityofScienceandTechnologyofChina11例1[0-1背包]:n=3,w=(16,15,15),v=(45,25,25),c=30(1)定义解空间:X={(0,0,0),(0,0,1),(0,1,0),…,(1,1,0),(1,1,1)}(2)构造解空间树:11-1方法概述UniversityofScienceandTechnologyofChina1211-1方法概述UniversityofScienceandTechnologyofChina13例2[TSP问题]:(1)定义解空间:X={12341,12431,13241,13421,14231,14321}(2)构造解空间树:(3)从A出发按DFS搜索整棵树:最优解:13241,14231成本:2511-1方法概述UniversityofScienceandTechnologyofChina14用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。在任何时刻,算法只保存从根结点到当前扩展结点的路径。如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为O(h(n))。而显式地存储整个解空间则需要O(2h(n))或O(h(n)!)内存空间。11-1方法概述UniversityofScienceandTechnologyofChina15回溯法对解空间作深度优先搜索,因此在一般情况下可用递归函数来实现回溯法:子集树回溯算法Backtrack(intt)//搜索到树的第t层{//由第t层向第t+1层扩展,确定x[t]的值iftnthenoutput(x);//叶子结点是可行解elsewhile(allXt)do//Xt为当前扩展结点的所有可能取值集合{x[t]=Xt中的第i个值;if(Constraint(t)andBound(t))Backtrack(t+1);}}执行时,从Backtrack(1)开始。11-2算法框架UniversityofScienceandTechnologyofChina16排列树回溯法Backtrack(intt)//搜索到树的第t层{//由第t层向第t+1层扩展,确定x[t]的值iftnthenoutput(x);//叶子结点是可行解elsefori=ttondo{swap(x[t],x[i]);if(Constraint(t)andBound(t))Backtrack(t+1);swap(x[t],x[i]);}}11-2算法框架UniversityofScienceandTechnologyofChina17问题定义:给定正整数n,生成1,2,…,n所有排列。解空间树(排列树):当n=3时,11-3排列生成问题UniversityofScienceandTechnologyofChina1811-3排列生成问题UniversityofScienceandTechnologyofChina19问题描述:略基本思想:利用排列生成问题的回溯算法Backtrack(2),对x[]={1,2,…,n}的x[2..n]进行全排列,则(x[1],x[2]),(x[2],x[3]),…,(x[n],x[1])构成一个回路。在全排列算法的基础上,进行路径计算保存以及进行限界剪枝。main(intn){a[n][n];x[n]={1,2,…,n};bestx[];cc=0.0;bestv=∞;//bestx保存当前最佳路径,bestv保存当前最优值input(a);//输入邻接矩阵TSPBacktrack(2);output(bestv,bestx[]);}11-4TSP问题UniversityofScienceandTechnologyofChina20TSPBacktrack(inti){//cc记录(x[1],x[2]),…,(x[i-1],x[i])的距离和if(in){//搜索到叶结点,输出可行解与当前最优解比较if(cc+a[x[n]][1]bestvorbestv=∞){bestv=cc+a[x[n]][1];for(j=1;j=n;j++)bestx[j]=x[j];}}else{for(j=i;j=n;j++)if(cc+a[x[i-1]][x[j]]bestvorbestv=∞){//限界裁剪子树swap(x[i],x[j]);cc+=a[x[i-1]][x[i]];TSPBacktrack(i+1);cc-=a[x[i-1]][x[i]];swap(x[i],x[j]);}}}11-4TSP问题UniversityofScienceandTechnologyofChina21问题描述:在4x4棋盘上放上4个皇后,使皇后彼此不受攻击。不受攻击的条件是彼此不在同行(列)、斜线上。求出全部的放法。解表示:11-5n皇后问题UniversityofScienceandTechnologyofChina2211-5n皇后问题UniversityofScienceandTechnologyofChina2311-5n皇后问题UniversityofScienceandTechnologyofChina2411-5n皇后问题UniversityofScienceandTechnologyofChina2511-6符号三角形问题下图是由14个“+”和14个“-”组成的符号三角形。2个同号下面都是“+”,2个异号下面都是“-”。++-+-+++----+-+++--++--+---+在一般情况下,符号三角形的第一行有n个符号。符号三角形问题要求对于给定的n,计算有多少个不同的符号三角形,使其所含的“+”和“-”的个数相同。UniversityofScienceandTechnologyofChina26解向量:用n元组x[1:n]表示符号三角形的第一行,x[i]=1表示符号三角形的第一行第i个符号为“+”,x[i]=0表示符号三角形的第一行第i个符号为“-”。可行性约束函数:当前符号三角形所包含的“+”个数与“-”个数均不超过n*(n+1)/4无解的判断:n*(n+1)/2为奇数11-6符号三角形问题++-+-+++----+-+++--++--+---+++-+-++-----+++-++-+-UniversityofScienceandTechnologyofChina27voidTriangle::Backtrack(intt){//是一棵子集树,t控制着第一行符号个数,对应于树的层次if((counthalf)||(t*(t-1)/2-counthalf))return;//剪枝法,剪除不必要的子树if(tn)sum++;//到叶子结点,”+”号数和”-”号数相同的符号三角形个数增加1elsefor(inti=0;i2;i++){//当前扩展结点Z只有两种可能的取值0或1,即只可能有2个孩子p[1][t]=i;//二维数据p记录了符号三角形矩阵count+=i;//当前符号三角形矩阵中,”+”号的个
本文标题:博弈树搜索
链接地址:https://www.777doc.com/doc-4640286 .html