如何实现AO *算法?


16

我注意到在实现搜索算法时会使用不同的数据结构。例如,我们使用队列来实现广度优先搜索,使用堆栈来实现深度优先搜索,使用最小堆来实现A *算法。在这些情况下,我们不需要显式构造搜索树。

但是我找不到简单的数据结构来模拟AO *算法的搜索过程。我想知道是否显式构造搜索树是实现AO *算法的唯一方法?谁能为我提供有效的实施方案?


3
欢迎!请记住要包括对您使用的非标准材料的引用。由于AO *没有Wikipedia文章,因此链接肯定是正确的。希望我找到了一个不错的,请检查。
拉斐尔

1
它不只是一张图(具有允许移动到“下一个”节点的功能)吗?
soandos 2012年

如果有人只是勾勒出AO *与A *算法有何不同,这将有所帮助。无法从链接中弄清楚这一点。至于实现,树的任何结构似乎都是合理的。...它遍历树对吗?
vzn

Answers:


1

关于本文,每次在AO *算法中扩展节点时,都必须向后进行更新以更新其所有先前版本的估计成本。

当使用线性数据结构包含节点时,必须顺序遍历数据元素,并且只能直接获取一个数据元素(堆栈,队列,优先级队列…)。

在AO *中,每次根据节点的估计成本对节点进行扩展时,该算法都会迭代其前身的所有节点(以更新其估计成本)。这意味着有时您应该基于其估计成本,有时应基于其后继元素。在一般情况下,没有满足这两个条件的顺序。也许有一种使用“嵌套”线性数据结构的方法,但是它应该只是模仿一个树结构,而改成构建搜索树会更好。


0

我只是取消了您链接到的描述,但是BST呢?您也许可以构造它来平衡未解决的节点。这样可以节省您执行步骤2的时间,并且可以根据遍历的数量减少总时间。当然,如果您根据未解决的节点对树进行平衡/排序,则可能至少比简单化的数据结构更好,从而可以保持对数时间。

http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree


2
做到吗?
拉斐尔

对我来说还不太清楚如何使用BST,因为BST在每个节点上都有一个数字索引并用于放置它们。使用的数字索引是多少?
vzn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.