BFS与DFS空间消耗计算咨询:分支因子12深度6场景
BFS与DFS的空间消耗计算及错误答案纠正
一、BFS的空间计算
广度优先搜索(BFS)按层级遍历节点,其frontier(待访问节点队列)的最大规模出现在即将访问目标节点所在层级时,此时队列中包含目标层级的所有节点:
- 分支因子为12(每个节点有12个子节点),目标位于深度6(根节点为深度0),则深度6的节点总数为
12^6(12的6次方)。 - 每个状态占用120字节,因此BFS的frontier所需空间为
12^6 * 120字节。
你给出的BFS答案 6^12 * 120 是错误的,核心问题是混淆了分支因子与深度的运算关系——正确的计算应为分支因子的深度次方,而非深度的分支因子次方。
二、DFS的空间计算
深度优先搜索(DFS)沿单一路径深入,回溯时再探索其他分支,其frontier(栈)的最大规模由当前搜索路径的长度决定:
- 针对无环树结构,递归实现的DFS空间由递归栈深度决定,即等于目标深度6,此时栈中保存的是从根节点到当前深度节点的完整路径,共6个节点,空间为
6 * 120字节。 - 若为迭代实现的DFS,栈中可能包含未访问的子节点,但最坏空间规模仍远小于BFS,通常讨论DFS空间复杂度时默认以递归栈的路径长度为基准。
你给出的DFS答案 12*6*120 是错误的,该计算错误地将分支因子与深度相乘,实际上DFS无需保存所有层级的子节点,仅需维护当前搜索路径的节点即可。
内容的提问来源于stack exchange,提问作者Tanvir Ahmed
相关产品推荐
相关产品推荐

