【发布时间】:2017-07-07 03:20:33
【问题描述】:
我正在阅读https://www.ics.uci.edu/~welling/teaching/271fall09/UninformedSearch271f09.pdf的讲座
BFS的内存使用量是O(b^d+1),ID-DFS的内存使用量是O(bd)。
我要检查一件事,为什么 ID-DFS 不存储所有访问过的节点?
我想出来的原因是它只需要存储路径和它在路径上扩展的节点。对于它所访问的路径之外的其他节点可以从树中丢弃(从内存中释放它们),因为这些节点不利于从根指向目标节点。
对于BFS,因为我们不知道解在哪里,所以在找到解之前不能丢弃访问过的节点。
以上想法是对还是错?
注意事项: 更准确地说,在 ID-DFS 中,据我所知,当访问一个节点时,我们应该生成它的所有合法子节点,比如 n 个子节点,并访问第一个子节点 n1。对于第二个孩子 n2,它将被访问,直到有限深度 DFS 完成搜索 n1。这就是为什么 ID-DFS 中的内存使用量是 O(bd),分支因子乘以深度。对于某些访问节点时不需要生成所有子节点的应用程序,可以只生成第一个子节点;对于第二个孩子,可以在搜索n1后生成并返回。对于这样的修改,只需要存储路径,所以它的内存使用是O(d)。
【问题讨论】:
-
是的,除了您对 DFS 搜索的“节点等待”的含义含糊不清。 IDFS 的唯一成本是为根路径中的每个节点存储某种迭代器(例如,子指针数组的索引)。
-
感谢cmets,我已经修改了一些词,使其更全面(我希望),并添加一些注释来讨论它的内存使用情况。