A算法与A*算法——常用于图 搜 索 策 略
•或图通用算法在采用如下形式的启发式函数时, 称为A算法。
f(n)=g(n)+h(n)
其中g(n)表示从S0到n点费用的估计,因为n为当前节点,搜索已达到n点,所以g(n)可计算出。h(n)表示从n到Sg接近程度的估计,因为尚未找到解路径,所以h(n)仅仅是估计值。
若规定h(n)≥0,并且定义:
f*(n)=g*(n)+h*(n)
f*(n)表示S0经点n到Sg最优路径的费用,也有人将f*(n)定义为实际最小费用。其中g*(n)为S0到n的最小费用, h*(n)为n到Sg的实际最小费用估计。
在A算法中,若令:
•h(n) ≡ 0,则A算法相当于广度优先,因为上一层节点的搜索费用一般比下一层的小。
• g(n) ≡ h(n) ≡ 0,则相当于随机算法。
• g(n) ≡ 0 ,则相当于最佳优先算法。
• 特别是当要求:h(n) ≤h(n) 就称为这种A算法为A*算法。
A*算法步骤:
设S0 :初态, Sg:目标状态
- open={S0};
- closed={ };
- 如果open={},失败退出;
- 在open表上取出f最小的结点n,n放到closed表中,即 f(n)=g(n)+h(n), h<=h*
- 若n∈Sg,则成功退出;
- 产生n的一切后继,将后继中不是n的先辈点的一切点构成集合M
- 对M中的元素P,分别作两类处理:
7.1 若P∉G,则对P进行估计加入open表,记入G和Tree。
7.2 P∈G,则决定更改Tree中P到n的指针并且更改P的子节点n的指针和费用。 - 转3。