(5) If 栈为空并且 c, Then cc , 并返回2
End
.
25
迭代加深A*算法
上述算法涉及了两个深度限制:
(1)如果栈中所含节点的所有子节点的f值小于 限制值c,则把这些子节点压如栈中以满足迭代 加深算法的深度优先准则.
(2)如果不这样,即节点n的一个或多个子节点 n 的f值大于限制值c,则节点n的 c 值设置为 micn,f((n))
节点的最佳路径的总代价的估值。
.
16
A*算法
把估价函数f (n)和 f *(n)相比较:
g (n)是对 g*(n)的估计。 h (n)是对h* (n)的估计。
在这两个估计中,尽管g (n)容易计算,但它不 一定就是从起始节点S0到节点n 的真正的最短 路径的代价,很可能从初始节点S0到节点n 的 真正最短路径还没有找到,所以一般都有:
该算法终止的条件为:
(1)找到目标节点(成功结束); (2)栈为空并且限制值 c 。
.
26
迭代加深A*算法
IDA*算法和A*算法相比,主要优点是对于内存 的需求。A*算法需要指数级数量的存储空间,因 为没有深度方面的限制。而IDA*算法只有当节点 n的所有子节点 的 n 小f (于n)限制值c时才扩展 它,这样就可以节省大量的内存。
点 x 是从初始节点经过m步得到,则g (x) 应该和 m 成正比(或者就是m)。 如何计算h(x)呢? h (x) 只是一个预测值。
.
3
图搜索算法(A算法)(P78:算法3.8)
Procedure Graph-Search
Begin 建立一个只含有初始节点S0的搜索图G,把S0放入OPEN表;计算f(S0)=g(S0)+h(S0); 假定初始时CLOSED表为空。 While OPEN 表不空 do Begin 从OPEN表中取出f值最小的节点(第一节点),并放入CLOSED表中.假设该节点 的编号为n。 If n是目标,则停止;返回n,并根据n的反向指针指出的从初始节点到n的路径。 Else do