algorithm - 需要澄清 A* 算法
解决方案
示例中使用的启发式函数并不一致。为了使启发式一致,以下等式必须为真:
对于每个节点 x, y:h(x) + w(x, y) >= h(y),其中 h(v) 是节点 v 的启发函数值,w(x, y) 是两个节点之间的实际距离节点 x 和 y。
在本例中,h(B) = 13, h(E) = 4 和 w(B, E) = 6。如您所见,h(E) + w(B, E) = 10 < h(B) ,所以启发式不一致。
这意味着什么?好吧,具有这种启发式的 A* 搜索在图中可能不是最优的。如果不重新访问某些节点,它可能找不到最短路径。
在这个例子中作者可能假设重新访问 E 节点,所以 A* 将首先到达 C,然后是 A、E、F、D、B,它应该从 B 再次访问 E,因为 SBE 比 SAE 短,然后再访问F 并转到 G。最后的路径将是 SBEFG。
推荐阅读
- linux - Ceres make 失败:“Makefile:138: 目标‘全部’的配方失败”
- ada - Ada GPS 编辑器在粘贴文本时崩溃
- maven - 从命令行执行依赖插件时如何使Maven使用凭据
- javascript - JS:添加样式 onload,然后使用 Javascript 删除样式 onclick
- android - app:transformClassesWithDexBuilderForDebug 在 Android 中需要很长时间
- c# - Stripe.Net 21.4.1 从“BalanceService”对象中删除了“List”方法
- java - 如何使用 Hibernate 创建约束?
- javascript - 获取多边形的面积
- caching - RxJava2 在 Observable 中有远程数据覆盖本地数据
- angular - nativescript-contacts 如何与谷歌联系人同步?