搜索算法总结

搜索算法广泛应用于人工智能领域,但是由于时间复杂度是指数级别,计算机科学家在朴素的搜索算法(广度优先,深度优先搜索)上优化得到了一系列搜索算法

 

本文介绍的搜索算法主要指:广度优先搜索,深度优先搜索,以及在此基础上优化得来的

A*算法,分支限界算法。如有错误欢迎指正。

 

为了便于描述,搜索算法适用解决在一张有权无向图中,找到从原点到终点的最短路径。

基础搜索算法的通式是这样的:

Wait_arr[]数组存放待扩展的节点。

初始化:把初始节点root加入到wait_arr[]数组中

While( wait_arr[]数组不为空 ){

wait_arr[]数组中取出左边第一个节点n

把取出节点扩展出邻接子节点

For( 遍历筛选每个邻接子节点 ){

     If( 子节点没有出现在path中 ),留下这个子节点,然后记录这个子节点的父亲是节点

}

If( 还存在子节点 )

     子节点加入到wait_arr[]中。

}

注:由于每个子节点都保留了它的父亲节点,所以很容易逆推出到达该子节点的路径path

深度优先与广度优先搜索的区别与联系:

深度优先和广度优先的区别,从上面的通式中可以解释为红字部分的不同:

深度优先搜索:邻接子节点加入wait_arr[]数组的最左边,所以每次扩展的节点都是新的节点。

广度优先搜索:邻接子节点加入wait_arr[]数组的最右边,所以每次扩展的节点都是老一辈的节点。

 

A*算法与朴素搜索算法的区别与联系:

A*算法实际上是模拟这么一个过程,在广场上,有一些遮挡物,人要从B点越过遮挡物到达出口E点,应该怎么做呢?人每一次可以选择向前,向后,向左,向右四种走法。但是人比较聪明,每一次选择自己记忆中直线距离离E点最近的那个方向迈步,如果不行再回溯试其他的方向。这就是A*算法。

A*算法和之前的朴素的搜索算法有什么区别和联系呢?

 

估价函数 

f(n) = h(n) + g(n);   其中f(n)是代表当前节点n的估计代价,g(n)

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值