已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章搜索算法,搜索算法:是利用计算机的高性能来有目的地枚举一个问题的部分或所有可能情况,从而找到解决问题的一种方法。该方法策略的适应性很强,只要问题有解,它肯定能将其解找到;但其搜索效率不是太好。,5.1穷举搜索,穷举搜索是最基本的搜索算法,是蛮力策略的一种表现形式。(蛮力策略有2种表现形式:枚举法,穷举搜索;)穷举搜索基本思想:针对问题的可能解是有限种的情况,逐一检查所有可能的情况,从中找到问题真正的解。例51:给定一个有向带权图G=(V,E),权非负,如图5-1所示。找出顶点15的最短路径及其长度。,问题分析该问题所有可能的路径只有三条,分别是:12451345145采用穷举搜索的方法逐一检查这三条路径的长度。最短路径为1245,其长度为3。,例52给定一艘船和三个集装箱,船的载重为10,三个集装箱的重量分别为5,8,3。在体积不受限制的情况下,如何将尽可能多的集装箱装上船?问题分析:每个集装箱要么装上船,要么不装;0表示不装,1表示装;则问题的所有可能解可以用8个3元01向量表示:即(0,0,0)、(0,0,1)、(0,1,0)、(0,1,1)、(1,0,0)、(1,0,1)(1,1,0)、(1,1,1)采用穷举搜索的方法逐一检查容易得出问题的解(1,0,1),利用搜索法解题时,需要把问题的所有可能的解(解空间)描述出来,如何描述问题的所有可能解?解空间通常有2表示形式:1)子集树2)排列树,1)子集树当要求解的问题需要是在n个元素的子集中进行搜索,其搜索空间树被称作子集树(subsettree)。某个元素xi=1表示该元素在要找的子集中,xi=0表示该元素不在要找的子集中,这样搜索空间为:(0,0,0,0),(0,0,0,1),(0,0,1,0),(0,0,1,1),(1,1,1,1)。共2n个状态。如例52,若表示为树形结构就是一棵有2n个叶结点的二叉树,对树中所有分支进行遍历的算法都必须耗O(2n).下图就是一个n3时的子集树:,树的根节点表示初始状态;中间节点表示某种情况下的中间状态;叶子节点表示结束状态;从根节点到叶子节点的路径表示一个可能的解。,2)排列树,当要求解的问题需要在n元素的排列中搜索问题的解时,相应的解空间树被称作排列树(permutationtree)。搜索空间为:(1,2,3,n-1,n),(2,1,3,n-1,n),(2,3,1,n-1,n),(2,3,4,1,n-1,n),(n,n-1,3,2,1)第一个元素有n种选择,第二个元素有n-1种选择,第三个元素有n-2种选择,第n个元素有1种选择,共计n!个状态。若表示为树形就是一个n度树,这样的树有n!个叶结点,所以每一个遍历树中所有节点的算法都必须耗时O(n!)下图为n=4时的排列树;,图5-3n=4的部分子集树,补充:广度优先搜索(自学),1、算法的基本思想首先,构造问题的解空间;然后,从初始节点S0开始,逐层地对节点进行扩展并考察它是否为目标节点。在第n层的节点没有全部扩展并考察之前,不对第n+1层的节点进行扩展。,2、算法分析与描述,从广度优先搜索定义可以看出活结点的扩展是按先来先处理的原则进行的,所以在算法中要用“队”来存储每个E-结点扩展出的活结点。为了算法的简洁,抽象地定义:queue为队列类型,InitQueue()为队列初始化函数,EnQueue(Q,k)为入队函数,QueueEmpty(Q)为判断队空函数,DeQueue(Q)为出队函数。实际应用中,用数组或链表实现队列。开辟数组visited记录visited结点的搜索情况。在算法框架中以输出结点值表示“访问”。,1)邻接表表示图的广度优先搜索算法,intvisitedn;/n为结点个数/bfs(intk,graphhead)inti;queueQ;edgenode*p;/定义队列/InitQueue(Q);/队列初始化/print(“visitvertex”,k);/访问源点vk/visitedk=1;EnQueue(Q,k);/vk已访问,将其入队。/while(!QueueEmpty(Q)/队非空则执行/i=DeQueue(Q);/vi出队为E-结点/p=headi.firstedge;/取vi的边表头指针/while(pnull)/扩展E-结点/if(visitedp-adjvex=0)/若vj未访问过/print(“visitvertex”,p-adjvex);/访问vj/visitedp-adjvex=1;EnQueue(Q,p-adjvex);/访问过的vj人队/p=p-next;/找vi的下一邻接点/,2)邻接矩阵表示的图的广度优先搜索算法,bfsm(intk,graphg100,intn)inti,j;CirQueueQ;InitQueue(Q);print(visitvertex,k);/访问源点vk/visitedk=1;EnQueue(Q,k);while(notQueueEmpty(Q)i=DeQueue(Q);/vi出队/for(j=0;jn;j+)/扩展结点/if(gij=1andvisitedj=0)print(visitvertex,j);visitedj=1;EnQueue(Q,j);/访问过的vj人队/,【例】已知若干个城市的地图,求从一个城市到另一个城市的路径,要求路径中经过的城市最少。如下图表示的是从城市A到城市H的交通图。从图中可以看出,从城市A到城市H要经过若干个城市。现要找出一条经过城市最少一条路线。,图5-6,具体过程如下:,1)将城市A(编号1)入队,队首qh置为0、队尾qe置为1。2)将队首所指的城市所有可直通的城市入队(如果这个城市在队中出现过就不入队),然后将队首加1,得到新的队首城市。重复以上步骤,直到城市H入队为止。当搜到城市H时,搜索结束。3)输出最少城市线路。,算法描述如下:,search()qh=0;qe=1;sq1.city=1;sq1.pre=0;visited1=1;while(qhqe)/当队不空/qh=qh+1;/结点出队/for(i=1;i=n,i+)/扩展结点/if(jzsqqh.cityi=1andvisitedi=0)qe=qe+1;/结点入队/sqqe.city=i;sqqe.pre=qh;visitedqe=1;if(sqqe.city=8)out();print(“Noavaliableway.”);,out();/输出路径/print(sqqe.city);while(sqqe.pre0)qe=sqqe.pre;print(-,sqqe.city);,1、算法的基本思想首先,构造问题的解空间;然后,从初始节点S0开始,在其子节点中选择一个节点进行考察。若不是目标节点,则再在该子节点的子节点中选择一个节点进行考察,一直如此向下搜索。当达到某个子节点,且该子节点既不是目标节点,又不能继续扩展时,才选择其兄弟节点进行考察。,5.2深度优先搜索(自学),例54:给定一个有向图G=(V,E),如图5-2所示。给出深度优先搜索该图的一个访问序列。输出一个深度优先搜索序列:1,2,5,3,4,6,7,算法描述:/标记图中顶点是否被访问过boolVisitedn+1;for(inti=1;i=n;i+)Visitedi=0;/用0表示顶点未被访问过/从顶点k出发进行深度优先搜索Dfsk(intk)Visitedk=1;/标记顶点k已被访问过for(intj=1;j=n;j+)if(c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仓库盘点小结方案
- 诚信企业活动方案
- 营销代理牙刷活动方案
- 评选好党员活动方案
- 暴雨洪涝应急救援预案范本
- 病虫害防治做法经验分享
- 语文常规展示课活动方案
- 标准辞职流程
- 街头清扫活动方案
- 大学生社会实践手册
- 建筑模型学生介绍
- 王源完整课件
- 2025年国家级检验检测机构资质认定评审员考试测试题及答案
- 2025年深圳劳动合同范本
- 银行支付结算2025年冲刺押题卷(含答案)
- 2025建筑施工企业安管人员考试(企业主要负责人A类)练习题及答案
- 高低压柜培训课件
- 大四下签劳动合同
- 2025内蒙古鄂尔多斯市国有资产投资控股集团有限公司招聘32人考试参考试题及答案解析
- 2025年黑龙江省教育系统校级后备干部选拔考试题及答案
- T/NAHIEM 54-2022骨髓移植病房建设标准
评论
0/150
提交评论