我正在读的演讲中https://www.ics.uci.edu/~welling/teaching/271fall09/UninformedSearch271f09.pdf内存使用在迭代式深化DFS(ID-DFS)和BFS
在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的唯一成本是为根路径中的每个节点存储某种迭代器(例如,指向子指针数组的索引)。 – Gene
感谢您的评论,我修改了一些单词以使其更全面(我希望),并添加了一些注释来讨论它的内存使用情况。 – user3148602