我理解BFS和DFS,但对于我的生活无法弄清迭代加深与BFS之间的区别。显然迭代加深与DFS具有相同的内存使用率,但我无法看到这是如何可能的,因为它只是像BFS一样不断扩展。 如果有人能澄清那将是非常棒的。
如果需要,可以使用树:
A
/ \
B C
/ / \
D E F
答案 0 :(得分:18)
根据我对算法的理解,IDDFS(迭代加深深度优先搜索)只是多次执行深度优先搜索,加深了每次迭代搜索的节点级别。因此,内存需求与深度优先搜索相同,因为最大深度迭代只是完全深度优先搜索。
因此,对于您给出的树的示例,第一次迭代将访问节点A,第二次迭代将访问节点A,B和C,第三次迭代将访问树的所有节点。 / p>
这样实现的原因是,如果搜索有时间限制,那么算法至少会知道“好得分”节点在达到时间限制之前是什么完全遍历树。
这与广度优先搜索不同,因为在每次迭代时,访问节点就像在深度优先搜索中一样,而不是像广度优先搜索那样。通常,IDDFS算法可能会存储每次迭代中找到的“最佳得分”节点。
答案 1 :(得分:17)
从我所理解的迭代深化DFS下降到深度1然后DFS下降到深度2 ...下至深度n,依此类推直到找不到更多级别
例如我认为树会被读取
read visited depth
A A 1
ABC ABAC 2
ABDCEF ABDBACECF 3
我相信它几乎为每个级别做了一个具有深度限制的单独DFS并丢弃了内存。
答案 2 :(得分:4)
内存使用量是它在任何时候保存的最大节点数。不是访问过的节点数。
任何时候IDFS都需要只存储它正在扩展的分支中的节点。如果我们正在扩展C(在你的例子中),只需要A和C. BFS必须保存正在搜索的深度的所有节点。为了看到效果采用分支因子为8而不是2的树来搜索深度为3,BFS需要存储大量的64个节点。 IDFS只需要3个。
答案 3 :(得分:2)