非启发式搜索

5 篇文章 0 订阅
3 篇文章 0 订阅

简单介绍一下非启发式搜索。
非启发式搜索是一种无信息搜索,一般只适用于求解比较简单的问题,通常是按预定的搜索策略进行搜索,而不会考虑到问题本身的特性(即就是不会利用问题本身的信息)。
常用的非启发式搜索有:
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相同.
看一道题,会体会的更深迭代加深搜索

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值