我试图理解为什么理论上A* search algorithm
被认为比A search algorithm
更好。
在两种算法中,根据函数f(n)
扩展节点。
A
:f(n) = g(n) + h(n)
在A*
中:f(n) = g(n) + h*(n)
(*表示该函数是估算值)。
A*
应该减少必须生成和比较的路径数量。我的问题是:如何使用h*(n)
代替h(n)
来减少路径数量?
谢谢:)
答案 0 :(得分:8)
因为您通常不知道h(n)
的确切值。要计算这个,您必须从该节点到目标进行完整搜索,并且为每个节点执行此操作将非常昂贵。
考虑通过道路连接的城市。你怎么知道从任何一个城市到达目标城市的旅行距离是多少?没有搜索就无法做到这一点。相反,您可以使用直接距离作为实际行程距离的估计,如果您有两个城市的坐标,这是一个非常简单和快速的计算。
答案 1 :(得分:0)
所以,如果我理解你的话,f(n)是一个通过将两个函数g(n)和h(n)相加而构建的函数。这意味着h(n)也是一个函数。
这意味着你估计函数的结果而不是计算整个函数本身。
如果我读得对,它现在不会得到h(n)的所有可能性,但主要的那些。
修改强>
例如,如果你有一个3个零的函数。如果你让系统估计它可能会给你零(1/0)(17/0)(212/0) 如果你现在让它计算它可能给你的确切值(0.99998768 / 0)(17.002020111 / 0)(211.988878888 / 0)它花了更多的资源但仍然得到大约相同的零。