我看过很多其他的stackoverflow答案,它们都和我的讲师在幻灯片中写的不同。
深度优先搜索具有O(b^ m)的时间复杂度,其中B是
搜索树的最大分支因子和m是最大深度。
国家空间。如果m比d大得多,那就太可怕了,但是如果搜索
树是“浓密的”,可能比广度优先搜索快得多。
他接着说……
空间复杂度为O(Bm),即作用长度的空间线性。
顺序!只需要存储从根到叶的一条路径
节点,以及上每个节点的剩余未展开同级节点
路径。
Another answero n stackoverflow状态为o(n+m)。
最佳答案
时间复杂度:如果可以在O(1)时间内访问每个节点,则用B的分支因子和M的最大深度,该树中的节点总数将是最坏情况=1 +b+b2+…+bM-1。使用一个几何序列的求和公式(甚至自己求解)表明,这个和等于(bm-1)/(b-1),结果是访问每个节点的总时间与bm成比例。因此,复杂性= O(BM)。
另一方面,如果不是使用分支因子和最大深度,则节点N的数目,那么你可以直接说,复杂性将与n或等于O(n)成正比。
你在问题中提到的其他答案也同样使用了不同的术语。这个想法在任何地方都是一样的。一些解决方案也增加了边缘计数,以使答案更精确,但一般而言,节点计数足以描述复杂性。
空间复杂度:最长路径=m的长度。对于每个节点,你必须存储它的兄弟姐妹,这样当你访问了所有的孩子,然后你回到一个父节点,你就可以知道下一步要探索的兄弟姐妹。对于路径上的m个节点,必须为每个m个节点额外存储b个节点。这就是你得到O(BM)空间复杂度的方法。
关于algorithm - 深度优先搜索的时间/空间复杂度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36479640/