IDA* 算法(Iterative deepening A*)

来源:互联网 发布:css布局 知乎 编辑:程序博客网 时间:2024/05/29 09:47

参考wikipedia

问题描述

从A点到B点的最短路径,每段路径值不小于0。

特点

带启发式的有限制的深度优先搜索,本质是在启发式限制下以不同的深度进行dfs。
在稀疏的有向图中深度优先效果往往优于广度优先,所以会好于A*算法,然而如果是棋盘类稠密问题,应该是A*更占优。
由于不再采用动态规划的方法,内存占用少。

主要结构

起点A,终点Bh() //启发式算法估计,当前节点到终点B的路径的一个下界,即小于等于真实的路径g() //当前节点的路径消耗值f()=g()+h()

伪代码

function IDA_search(node, g, bound):    // node当前节点    // g当前节点的路径消耗值    // bound当前搜索的一个界限值    f = g + h(node)    if f > bound:        return f    if node == B:        return FOUND    min = r    for succ in successors(node) do:        t = search(succ, g + cost(node, succ), bound)    if t == FOUND:        return FOUND    if t < min:         min = t    return minbound = h(A)while(True):    t = IDA_search(root, 0, bound)    if t == FOUND:        return bound    if t = ∞:        return NOT_FOUND    bound := t
原创粉丝点击