【发布时间】:2015-03-19 00:57:30
【问题描述】:
这是一个几乎是 A* 搜索的算法。本质上,它是具有使用 A* 优先级的优先级队列的 BFS。
frontier <- empty priority queue
frontier.insert(start) with priority g(start)+h(start)
while frontier isn't empty
vertex <- dequeue frontier
for each undiscovered neighbor of vertex
neighbor.discovered = true
neighbor.parent = vertex
frontier.insert(neighbor) with priority g(neighbor)+h(neighbor)
if neighbor == goal, stop
该算法缺少 A* 中处理这一事实的部分:找到到顶点的第一条路径不一定是到该顶点的最短路径。
很容易提出缺失部分至关重要的示例……对于加权图。对于未加权的图表,我无法提出任何建议。
这种更简单的 A* 版本是否适用于未加权图?
【问题讨论】:
-
如果使用A*优先级,怎么不先找到最短路径?以及如何计算未加权图的 g 或 h?
-
A* 如果启发式函数低估(通常会这样做),则可以首先找到更长的路径。这里有一个很好的例子:link
-
未加权图中的路径成本 g 就是路径长度。启发式函数 h 可以变化;例如,假设该图表示一个迷宫 - 所以每个顶点都是网格上的一个开放单元 - 而 h 可能是曼哈顿距离。
-
如果
h是使用曼哈顿距离计算的,那么节点之间的距离就是权重。 -
完整的 A* 实际上还有更多。它考虑更新队列中顶点的优先级。
标签: algorithm search graph a-star