非启发式搜索

来源:互联网 发布:四维设计软件 编辑:程序博客网 时间:2024/06/05 16:27

简单介绍一下非启发式搜索。
非启发式搜索是一种无信息搜索,一般只适用于求解比较简单的问题,通常是按预定的搜索策略进行搜索,而不会考虑到问题本身的特性(即就是不会利用问题本身的信息)。
常用的非启发式搜索有:
1,广度优先搜索(BFS)
BFS通常借用队列来完成。
主要代码思想为:

一张图G中(不一定是图,只要可以抽象成图的都可以)   1:初始节点S0开始入队并设访问标记    push(S0);visit(S0)=true;2:只要队列不空                    while(队列非空)3:从队列中弹出一个节点             tem = pop();4:检查是否为目标节点               if(tem == end) return 5:对tem节点进行扩展,将其未访问子节点一一入队,并加上已访问,然后重复此循环    

所以,可以知道,BFS在对本层的节点没有全部入队之前,是不会对下一层的节点进行访问的,这就可能导致空间开销非常大,但一般速度较快。

2,深度优先搜索(DFS)
DFS通常借用递归来完成。
主要代码思想为:

一张图G中(不一定是图,只要可以抽象成图的都可以)   1:访问初始顶点S0                                     DFS(S0);2:依次从S0的子节点出发,继续进行深度优先遍历   

可知道,要找到目标解可能要递归好多层,导致DFS占内存少但速度较慢。

3,迭代加深搜索
为克服DFS易陷入无穷分支死循环(图中存在环)的问题,提出了有界DFS方法。其实质上是指定递归深度的DFS。即开始指定DFS n层,如果没找到目标解,则在DFS n+1层,直到找到目标

好处有
1.占内存少 ——————–本质是DFS。
3.时间效率不低 —————————–虽然存在重复搜索,但是第n层的搜索与n+1层的搜索相比是可忽略的。

从实际应用来看,迭代加深搜索的效果比较好,并不比BFS慢很多,但是空间复杂度却与DFS相同.
看一道题,会体会的更深迭代加深搜索

1 0
原创粉丝点击