2016-10-04 77 views
1

我想了解A *,统一成本和贪婪搜索算法是如何工作的。我知道在所有3种算法中探索节点的方式发生了变化(贪婪会基于启发式值探索,基于启发式加距离的A *,基于距离的均匀性)。A *总是提供最短路径吗?

我想知道是否对于给定的来源和目的地,所有3种算法是否提供了最短路径(仅探索了不同数量的城市?),还是可以提供不同的路径。

由于实现部分的原因,我大多感到困惑 - 如果将节点存储在队列中,则当您要探索目标节点时,您将拥有最短路径,但如果您有路径队列(并且此队列现在是基于启发式+距离排序),那么你可能并不总是获得最短路径。

回答

4

不一定,这取决于你的启发式。请参阅this section in Wikipedia,详细解释它。总之,如果启发式是可以接受(这意味着它永远不会高估成本),A *会给出最佳解决方案。

+0

即使启发式是不可接受的,A *算法只会在探索目标节点时停止(由于不可接受的启发式,它可能会探索许多不必要的路径),在这种情况下,它必须首先探索所有到达该节点的路径,以便它总能找到最短路径,不是吗? – harrythomas

+0

@harrythomas不,作为一个极端的例子,考虑一个方形网格,一端在一个顶端角落,另一个在底部角落。我可以做一个启发式算法,使算法首先遵循边界,这将导致次优解决方案。 – orlp

+0

是的,但在这种情况下,当你探索另一条边时,你会发现最短的距离,你会更新它的权利?或者在A *星你不更新最短距离?考虑统一成本搜索找到最短路径的方式(通过使用找到的新值更新当前最短值) – harrythomas

0

实际上,启发式应该是可接受的,否则A *将找到次优解。我认为队列不应该由下一个节点的距离来协调,而是使用将作为下一个节点的启发式作为最有前途的节点。 认为:下一个节点可能距离当前节点最远,但同时它可能是距离目的地最近的节点。