A*(A星)寻路算法是一种什么样的算法paradigm/algorithm设计范式?

What kind of algorithm paradigm/algorithm design paradigm is A* (A star) pathfinding algorithm?

我不太清楚A*(A星)寻路算法是一种什么样的设计范式。根据Anany Levitin的书"Introduction to the Design & Analysis of Algorithms"的题目,我认为设计范式是一种贪心技术,因为这个算法是Dijktra算法和greedy best first这两种贪心技术的结合。但我不确定这是否是一个好的推理。

编辑:根据 Emma 的评论,她给了我维基百科的 link,其中说“Dijkstra 和 A* 是动态规划的特例。A* 本身是分支和泛化的特例边界。” link。 但是在另一个维基百科中 link 说 "Dijkstra's algorithm and the related A* search algorithm are verifiably optimal greedy algorithms for graph search and shortest path finding."

你问得好!

贪心已定!!!

我想这要视情况而定,我同意问题评论中的 "that's a bit of apples and oranges."

您的特定问题的答案可能是 here or here

根据某些维基百科页面,它被认为是 Greedy or Dynamic Programming (DP)

但是,templatetypedef also has a good point in the comment: "I would have pegged it as greedy 考虑到它在每个点都做出局部最优决策。"


贪婪

Dijkstra's algorithm and the related A* search algorithm are verifiably optimal greedy algorithms for graph search and shortest path finding.


动态规划

What sets A* apart from a greedy best-first search algorithm is that it takes the cost/distance already traveled, g(n), into account.

Some common variants of Dijkstra's algorithm can be viewed as a special case of A* where the heuristic h(n) = 0 for all nodes; in turn, both Dijkstra and A* are special cases of dynamic programming. A* itself is a special case of a generalization of branch and bound.

参考

我认为A*的主要范式是穷举搜索(或分支定界(b&b),很多人认为穷举搜索和b&b是两种不同的范式,但我认为b&b只是一种实现和改进穷举的技术search),像其他穷举搜索一样,A* 会探索整个解决方案space(排除确定的比最优解更差的解决方案)。贪婪只是一种附加技术,用于在最有希望的方向上导航搜索。

不贪心

根据维基百科,greedy algorithm "is any algorithm that follows the problem-solving heuristic of making the locally optimal choice at each stage",这不适用于 A*(恕我直言,在该维基百科页面的示例部分列出 A* 是错误的)。

为什么?

我对上述定义的理解是,"making the locally optimal choice at each stage" 意味着我们忽略了该状态下可能的其他选择——在贪婪策略中,我们从不重新考虑之前做出的选择。

而对于 A* 则不然,A* 最终会探索在任何阶段做出的所有选择,如果该阶段的先前选择不再看起来 "most promising"。确实,A* 将以局部最优选择开始其详尽的探索。

我的论证基于直接、直观的映射,即定义中的单词 "stage" 和 "choice" 映射到 A* 算法中的 "graph node" 和 "graph edge" .但是,如果你想将 "stage" 映射到 "subgraph explored",那么 A* 确实符合贪婪的条件——但使用这种非直观的映射,即使广度优先也会变得贪婪。