我注意到在实现搜索算法时,我们使用一些数据结构。例如,我们使用队列来实现广度优先搜索,使用栈来实现深度优先搜索,使用最小堆来实现A*算法。在这些情况下,我们不需要显式构建搜索树。
但是我找不到一个简单的数据结构来模拟AO*算法的搜索过程。我想知道是否显式构建搜索树是实现AO*算法的唯一方法?有人能提供一个高效的实现吗?非常感谢您的帮助。
但是我找不到一个简单的数据结构来模拟AO*算法的搜索过程。我想知道是否显式构建搜索树是实现AO*算法的唯一方法?有人能提供一个高效的实现吗?非常感谢您的帮助。
免责声明:我还没有实现AO*,所以可能会有错误。
实现AO*应该与A*并没有太大的区别。你使用一个堆,但是每个成员不仅仅是单个节点,而是一个节点向量(一个或多个节点)。在某种程度上,这取决于(and-or)规则是如何给出的,但是填充堆应该非常容易。因此,第一个问题的答案是否定的,没有必要像A*那样显式构造树。请记住,堆实际上是搜索树的一种表示,因此可以说在遍历它时,您实际上正在构造树。关于
有人能提供一个高效的实现吗?
你需要展示一些努力,至少提供一些伪代码,甚至更好的是一段代码,展示你如何解决这个问题。然后我们可以提出建议,通过改进数据结构来提高效率。