懂pascal程序设计的先回应我一下(随便打几个字),我想问一个关于广搜的问题!

来源:百度知道 编辑:UC知道 时间:2024/05/19 17:59:16
广搜是类似于深搜吧?(先问一下)
那如果广搜过程中如果得到的结点不是自己所想要的解
它是怎么返回的?
(确实,好像不是在问程序设计的问题,将就一下吧)

5-21补充:
再次声明,广搜不存在“返回”这种概念,要返回的绝对只有深搜
深搜只能一个节点一个节点的扩展,因此碰到没有解的支路必须返回换别的支路
广搜是一层一层的扩展节点,直到扩展出所需要的那个,如果没有扩展出来就一直扩展下去,直到把所有可扩展的节点都扩展出来或者找到所需要的那个。因为是一层一层(严格来说,是一批一批)的扩展,因此不需要走回头路,当节点数量不多的时候广搜的效率优势很明显

如果你还是不能理解这两种方式的差别,建议你查找以下的相关资料:
1、迷宫问题的深度优先搜索解法和广度优先搜索解法
2、图的深度优先遍历(类似于深搜)和宽度优先遍历(类似广搜)

虽然都是搜索,广搜和深搜很大不同
最明显的不同有两个:
1、深搜当无法向更深处扩展的时候要往回走,广搜不用
2、内存上,深艘只需要一个栈就可以很方便的递归实现,栈中只存储当前正在搜的节点,一般耗内存不大;广搜需要一个队列循环实现,队列中需要存储所有的节点,耗内存较大

此外,从效率上说,深搜可能会搜索到重复的节点,广搜绝对不会,因此广搜通常时间效率高一些
如果搜索过程中节点总数不多并且很容易扩展出相同的节点,一般用广搜
如果节点总数很多通常就是深搜

从效率优化的角度上说
广搜本身的效率就比较高,如果还要进行优化,要么就是改用双向广搜,要么就只能从搜索模型上面动手脚了
深搜的可优化空间很大,可以通过剪枝,也就是预先判断当前支路上是否可能有解/更优解来决定是继续搜索当前支路还是忽略该支路搜索下一支路。剪枝通常都很讲究技巧
因此一些搜索难题大多采用深搜+强力剪枝

此外,楼主问的是个纯粹的算法问题,不关pascal的事