人工智能深度优先算法课程设计报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2、算法程序描述: ① 递归
递归过程为: Procedure DEF-GO(step) for i:=1 to max do if 子结点符合条件 then 产生新的子结点入栈; if 子结点是目标结点 then 输出 else DEF-GO(step+1); 栈顶结点出栈; endif; enddo; 主程序为: Program DFS; 初始状态入栈; DEF-GO(1) ② 非递归 Program DEF(step); step:=0; repeat step:=step+1; j:=0;p:=false
深度优先搜索时,最关键的是结点扩展(OPEN)表的生成,它是一个栈, 用于存放目前搜索到待扩展的结点,当结点到达深度界限或结点不能再扩展时, 栈顶结点出栈,放入 CLOSE 表(存放已扩展节点),继续生成新的结点入栈 OPEN 表,直到搜索到目标结点或 OPEN 栈空为止。 具体算法如下: ① 把起始结点 S 放到非扩展结点 OPEN 表中(后进先出的堆栈),如果此结点为 一目标结点,则得到一个解。 ② 如果 OPEN 为一空表,则搜索失败退出。 ③ 取 OPEN 表最前面(栈顶)的结点,并把它放入 CLOSED 的扩展结点表中,并 冠以顺序编号n。 ④ 如果结点n的深度等于最大深度,则转向2。 ⑤ 否则,扩展结点n,产生其全部子结点,把它们放入 OPEN 表的前头(入栈), 并配上指向n的返回指针;如果没有后裔,则转向2。 ⑥ 如果后继结点中有任一个为目标结点,则求得一个解,成功退出;否则,转 向2。
人工智能课程报告 题目: 深 度 优 先 算 法
班 级:XXXXXXXXXXX 学 号:XXXXXXXXXXX 姓 名:XXXXXXXXXXX
【摘要】结合生活中解决搜索问题所常用的思考方法与解题方法,从深度优先探 讨了提高程序效率的适用技巧。 【关键词】1 搜索顺序;2 搜索对象;3 搜索优化;
一、深度优先搜索的优化技巧 我们在做事情的时候,经常遇到这类问题——给出约束条件,求一种满足
显然,在同样的一棵搜索树中,越在接近根接点的位置利用约束条件优化效 果就越好。如何在搜索中最大化的利用题目的约束条件为我们提供剪枝的依据, 是提高深度优先搜索效率的一个很重要的地方。而不同的搜索顺序和搜索对象就 直接影响到我们对于题目约束条件的运用。
三、搜索特点
1.由于深度搜索过程中有保留已扩展节点,则不致于重复构造不必要的子树系 统。 2.深度优先搜索并不是以最快的方式搜索到解,因为若目标节点在第 i 层的某处, 必须等到该节点左边所有子树系统搜索完毕之后,才会访问到该节点,因此,搜 索效率还取决于目标节点在解答树中的位置。
repeat j:=j+1;
if 结点符合条件 then 产生子结点入栈;
if 子结点是目标结点 then 输出 else p:=true;
else if j>=max then 回溯 p:=false;
endif; until p=true; until step=0; 回溯过程如下: Procedure BACK;
3.由于要存储所有已被扩展节点,所以需要的内存空间往往比较大。 4.深度优先搜索所求得的是仅仅是目前第一条从起点至目标节点的树枝路径,而 不是所有通向目标节点的树枝节点的路径中最短的路径。 5.适用范围:适用于求解一条从初始节点至目标节点的可能路径的试题。若要存 储所有解答路径,可以再建立其它空间,用来存储每个已求得的解。若要求得最 优解,必须记下达到目前目标的路径和相应的路程值,并与前面已记录的值进行 比较,保留其中最优解,等全部搜索完成后,把保留的最优解输出。 四、算法数据结构描述
step:=step-1; if step>0 then 栈顶结点出栈
else p:=true;
总结
在这次人工来自百度文库能 ppt 制作中,曾遇到过一些问题,但是经过查找 资料都已经得到解决,也正是因为这些问题引发的思考给我带了收 获。所以我认为只要我们有耐心和信心,我们一定能解决问题。
约束条件的方案,这类问题我们叫它“约束满足”问题。对于约束满足问题,我 们通常可以从搜索的顺序和搜索的对象入手,进而提高程序的效率。
二、搜索的顺序及对象: 在解决约束满足问题的时候,问题给出的约束条件越强,对于搜索就越有利。
之所以深度优先搜索的效率在很大程度上优于穷举,就是因为它在搜索过程中很 好的利用了题目中的约束条件进行优化,达到提高程序效率的目的。