深度优先搜索的空间复杂度

时间:2014-12-29 21:15:11

标签: algorithm artificial-intelligence

可能以前问过这个问题,但是,我不知道如何计算DFS的空间复杂度。例如,在这种情况下,分支因子(b)为3,深度(d)为5,每个节点需要10个字节的内存来表示。如何计算空间复杂度?

1 个答案:

答案 0 :(得分:1)

这取决于您执行深度优先搜索(DFS)的结构类型:

  • 通过:您无需检查之前是否访问过某个状态,并且只能存储当前跟踪(在堆栈中),最大深度为$ d $。对于跟踪上的每个状态,您需要存储已经遍历的传出转换,这最大化为每个状态的最大分支因子$ b $。因此,您需要$ O(d * b)$ space。
  • 通过图表:您需要另外通过存储已访问过的所有州来检查您是否曾访问过某个州,例如:在哈希表中。因此,您需要$ O(d * b + | V |)$空间,其中V是顶点集。在interwebs上,你通常会读到空间复杂度是$ O(| V |)$;通常状态的数量是主要因素,但如果您的状态空间有大的$ b $,请不要忽略这部分空间要求!