数据结构隐式图搜索

数据结构隐式图预习

实验内容

在这里插入图片描述

实验思路

1.open表与close表

  • open表:简单认为是一个未搜索节点的表

  • close表:简单认为是一个已完成搜索的节点的表(即已经将下一个状态放入open表内)
    对于这两个表的操作有如下规则:

  • 规则一:对于新添加的节点S’(open表和close表中均没有这个状态),S’直接添加到open表中

  • 规则二:对于已经添加的节点S’(open表或者close表中已经有这个状态),若在open表中,与原来的状态S的f(n)比较,取最小的一个。若在close表中,那就分成两种情况,第一种,close表中的该状态S的f(n)大于S’的,不做修改;第二种 S的f(n)小于S的,那就要需要将close表中S的f(n)更新,同时将该状态移入到open表中。

  • 规则三:下一个搜索节点的选择问题,选取open表中f(n)的值最小的状态作为下一个待搜索节点

  • 规则四:每次需要将带搜索的节点下一个所有的状态按照规则一二更新open表,close表,搜索完该节点后,移到close表中.

2.A*算法

这是一种在静态路网中求解最短路径的有效算法,通俗地讲,它不是像深度优先搜索算法和广度优先搜索算法一样的傻瓜式的埋头搜索,它是先对当前的情况进行分析,得到最有可能的一个分支,然后在该分支上进行扩展,然后将扩展的结果放在之前的大环境中进行比较,再选取最有可能的分支进行扩展,直到找到最终状态。
A*算法的核心是估价函数的选取(通俗的说就是对当前情况的评价方式的选取,通过什么方式选取的分支才是最有可能离最终状态最近的分支)。
公式表示为: f(n)=g(n)+h(n),
其中 f(n) 是从初始点经由节点n到目标点的估价函数,
g(n) 是在状态空间中从初始节点到n节点的实际代价,
h(n) 是从n到目标节点最佳路径的估计代价。

最佳路径查找步骤:
1,从起始状态A开始,并且把它作为待处理点存入一个“open list”。open list就像一张购物清单。尽管现在列表里只有一个元素,但以后就会多起来。你的路径可能会通过它包含的其他状态,也可能不会。基本上,这是一个待检查方格的列表。
2,寻找起点周围通过上下左右移动所有可到达的状态。也把他们加入open list。为所有这些状态保存状态A作为“父方格”。当我们想描述路径的时候,父方格的资料是十分重要的。后面会解释它的具体用途。
3,从open list中删除状态A,把它加入到一个“close list”。
4,取出open list中 f(n)最低的状态,判断该状态性质
(1) 如果在open list中出现,那么判断该状态的 g(n) 通过当前节点(从open list中取出,扩展出该节点的节点)作为父节点带来的 g(n) 是否小于原先的父节点,若小于则需要更改它的父节点以及 g(n) .
(2) 如果在close list中出现,那么判断该状态的 g(n) 通过当前节点(从open list中取出,扩展出该节点的节点)作为父节点带来的 g(n) 是否小于原先的父节点,若小于则需要从close list中删除该节点,并且将其加入open list,并更改其父节点为当前节点。
(3) 既不在open list,也不在close list,这样就很简单,直接加入open list中就行(保持open list升序排列)
(4) 如果取出的节点为目标节点,则成功退出

开发环境

实现语言:Java
开发平台:IntelliJ IDEA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值