欢迎来到天天文库
浏览记录
ID:48534885
大小:2.84 MB
页数:109页
时间:2020-01-23
《第5章 搜索法.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第5章搜索法张阳信息工程学院穷举法回溯法子集树最大团问题n后问题01背包问题排列树作业调度旅行售货员分支限界法先进先出队列优先权队列布线问题01背包问题旅行售货员问题第五章搜索法5.1穷举搜索思想针对问题的可能解是有限种的情况,逐一检查所有可能的情况,从中找到问题真正的解。示列给定一个有向带权图G=(V,E),权非负,如图5-1所示。找出顶点1→5的最短路径及其长度。该问题所有可能的路径只有三条,分别是:1→2→4→51→3→4→51→4→5采用穷举搜索的方法逐一检查这三条路径的长度。最短路径为1→2→4→5,其长度为3。5.1穷举搜索思想(给定图G=(V,E)
2、)初始时,所有顶点均未被访问过,任选一个顶点v作为源点。该方法先访问源点v,并将其标记为已访问过;然后从v出发,选择v的一个邻接点(子结点)w,如果w已访问过,则选择v的另外一个邻接点;如果w未被访问过,则标记w为已访问过,并以w为新的出发点,继续进行深度优先搜索;如果w及其子结点均已搜索完毕,则返回到v,再选择它的另外一个未曾访问过的邻接点继续搜索,直到图中所有和源点有路径相通的顶点均已访问过为止;若此时图G中仍然存在未被访问过的顶点,则另选一个尚未访问过的顶点作为新的源点重复上述过程,直到图中所有顶点均已访问过为止。5.2深度优先搜索示例:给定一个有向图G=
3、(V,E)。给出深度优先搜索该图的一个访问序列。输出一个深度优先搜索序列:1,2,5,3,4,6,75.2深度优先搜索练习给定一个无向图G=(V,E),如图5-4所示。给出深度优先搜索该图的一个搜索序列。5.2深度优先搜索//标记图中顶点是否被访问过boolVisited[n+1];for(inti=1;i<=n;i++)Visited[i]=0;//用0表示顶点未被访问过//从顶点k出发进行深度优先搜索Dfsk(intk){Visited[k]=1;//标记顶点k已被访问过for(intj=1;j<=n;j++)if(c[k][j]==1&&Visited[j
4、]==0)//c[][]是图对应的邻接矩阵Dfsk(j);}5.2深度优先搜索5.2深度优先搜索//深度优先搜索整个图GDfs(){for(inti=1;i<=n;i++)if(Visited[i]==0)Dfsk(i);}回溯法有“通用的解题法”之称。用它可以系统地搜索一个问题的所有解或任一解。有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往要使用回溯法。回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树的搜
5、索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。回溯法问题的解向量:回溯法希望一个问题的解能够表示成一个n元式(x1,x2,…,xn)的形式。显约束:对分量xi的取值限定(即:x的取值)。隐约束:为满足问题的解而对不同分量之间施加的约束。解空间:对于问题的一个实例,解向量满足显式约束条件的所有多元组,构成了该实例的一个解空间。注意:同一个问题可以有多种表示,有些表示方法更简单,所需表示的状态空间更小(存储量少,搜索方法简单)。n=3时的0-1背包问题用完全二叉树表示的解空间回溯法:解空间扩展结点:一个正在产生儿子的结点称为扩展结点活结点:一个
6、自身已生成但其儿子还没有全部生成的节点称做活结点死结点:一个所有儿子已经产生的结点称做死结点深度优先的问题状态生成法:如果对一个扩展结点R,一旦产生了它的一个儿子C,就把C当做新的扩展结点。在完成对子树C(以C为根的子树)的穷尽搜索之后,将R重新变成扩展结点,继续生成R的下一个儿子(如果存在)深度优先的问题状态生成法:在一个扩展结点变成死结点之前,它一直是扩展结点回溯法:为了避免生成那些不可能产生最佳解的问题状态,要不断地利用限界函数(boundingfunction)来处死那些实际上不可能产生所需解的活结点,以减少问题的计算量。具有限界函数的深度优先生成算法称
7、为回溯法回溯法:基本概念(1)针对所给问题,定义问题的解空间;(2)确定易于搜索的解空间结构;(3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。常用剪枝函数:用约束函数在扩展结点处剪去不满足约束的子树;用限界函数剪去得不到最优解的子树。回溯法:解题步骤回溯法:解空间在搜索过程中动态产生问题的解空间。在任何时刻,算法只保存从根结点到当前扩展结点的路径。如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为O(h(n))。显式地存储整个解空间则需要O(2h(n))或O(h(n)!)内存空间。回溯法回溯法是在仅给出初
8、始结点、目标结点及产生子
此文档下载收益归作者所有