如何实现AO*算法?

6
我注意到在实现搜索算法时,我们使用一些数据结构。例如,我们使用队列来实现广度优先搜索,使用栈来实现深度优先搜索,使用最小堆来实现A*算法。在这些情况下,我们不需要显式构建搜索树。
但是我找不到一个简单的数据结构来模拟AO*算法的搜索过程。我想知道是否显式构建搜索树是实现AO*算法的唯一方法?有人能提供一个高效的实现吗?非常感谢您的帮助。

您可以尝试将您的问题发布到:http://cs.stackexchange.com/ - Vitaly Olegovitch
1个回答

1

免责声明:我还没有实现AO*,所以可能会有错误。

实现AO*应该与A*并没有太大的区别。你使用一个堆,但是每个成员不仅仅是单个节点,而是一个节点向量(一个或多个节点)。在某种程度上,这取决于(and-or)规则是如何给出的,但是填充堆应该非常容易。因此,第一个问题的答案是否定的,没有必要像A*那样显式构造树。请记住,堆实际上是搜索树的一种表示,因此可以说在遍历它时,您实际上正在构造树。关于

有人能提供一个高效的实现吗?

你需要展示一些努力,至少提供一些伪代码,甚至更好的是一段代码,展示你如何解决这个问题。然后我们可以提出建议,通过改进数据结构来提高效率。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接