文章目录

* 代价树及其代价运算 <https://blog.csdn.net/hjc256/article/details/91358830#_6>
* 概念 <https://blog.csdn.net/hjc256/article/details/91358830#_8>
* 代价树的广度优先搜索 <https://blog.csdn.net/hjc256/article/details/91358830#_21>
* 算法描述 <https://blog.csdn.net/hjc256/article/details/91358830#_23>
* 总结 <https://blog.csdn.net/hjc256/article/details/91358830#_35>
* 代价树的深度优先搜索 <https://blog.csdn.net/hjc256/article/details/91358830#_42>
在一般树的搜索策略中,我们都进行了一种假设,认为状态孔家那种各边的代价都相同,且为一个单位量。从而使用路径长度代替路径的代价。


但是对许多实际问题,这样的假设是不实际的。例如,城市交通问题,各城市之间的距离不可能是相同的。

<>代价树及其代价运算

<>概念

通常,我们把每条边上都标有其代价的树称为代价树。

在代价树中,可以用g(n)g(n)g(n)表示从初始节点S0S_0S0​到节点n的代价,用c(n1,n2)c(n_1,n_2)c(n1​,n2​)表示从父节点
n1n_1n1​到其子节点n2n_2n2​的代价。这样,对节点n2n_2n2​的代价有:
g(n2) = g(n1) + c(n1,n2) g(n_2) \ = \ g(n_1) \ + \ c(n_1,n_2) g(n2​) = g(n1​) +
 c(n1​,n2​)

通常,在代价树中最小代价的路径和最短路径有可能是不同的。

代价树搜索的目的是为了找到最佳解,即找到一条代价最小的解路径。

<>代价树的广度优先搜索

也称分支限界法。每次从Open表中选择节点或往Closed表中存放节点时总是选择代价最小的节点。

<>算法描述

* 把初始节点S0S_0S0​放入Open表中
* 如果Open表为空,则问题无解,失败退出
* 把Open表的第一个节点取出,放入Closed表,并记该节点为n
* 考察节点n是否为目标节点,若是,则得到问题的解,成功退出
* 若节点n不可扩展,则转第二步
* 扩展节点n,将其子节点放入Open表的尾部,并未每一个子节点设置指向父节点的指针。按如下公式:
g(n2) = g(n1) + c(n1,n2) g(n_2) \ = \ g(n_1) \ + \ c(n_1,n_2) g(n2​) = g(n1​) +
 c(n1​,n2​)
计算各子节点的代价,并根据各节点的代价对Open表中的全部节点按照从小到大的顺序重新进行排序。。然后转到第二步。
<>总结

代价树的广度优先策略是完备的,如果问题有解则算法一定能找到它,并且找到的一定是最优解。



<>代价树的深度优先搜索

算法步骤与广度优先基本相同,区别在于代价树的深度优先搜索每次都是从刚扩展的子节点中选择一个代价最小的节点。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信