Graph 深度优先搜索的运行时间

Graph 深度优先搜索的运行时间,graph,depth-first-search,Graph,Depth First Search,我有一个关于DFS运行时间的问题。我知道它是O(n+m),但根据维基百科,还有另一个运行时间:O(b^d)。顺便说一句,两者的区别是什么,还是相同的表示法 这是维基百科上写的:“O(| E |)表示无重复遍历的显式图,O(b^d)表示隐式图”您在典型算法类中使用的大部分都是显式的图,但这些可能在现实世界中并不常见 对于这些显式图,深度优先搜索的运行时间为O(V+E)(或O(n+m),同样的事情);这里,V表示图形中的顶点数,E表示图形中的边数。这在直觉上应该是有意义的,因为深度优先搜索是一种遍历

我有一个关于DFS运行时间的问题。我知道它是O(n+m),但根据维基百科,还有另一个运行时间:O(b^d)。顺便说一句,两者的区别是什么,还是相同的表示法


这是维基百科上写的:“O(| E |)表示无重复遍历的显式图,O(b^d)表示隐式图”

您在典型算法类中使用的大部分都是显式的图,但这些可能在现实世界中并不常见

对于这些显式图,深度优先搜索的运行时间为O(V+E)(或O(n+m),同样的事情);这里,V表示图形中的顶点数,E表示图形中的边数。这在直觉上应该是有意义的,因为深度优先搜索是一种遍历算法,用于以深度优先搜索的方式遍历整个图,我们在遍历算法遇到死角后返回。好吧,但这是最简单的部分

您不习惯看到的更奇怪的部分是DFS的隐式图形表示。根据维基百科目前的说法,当涉及到搜索算法时,“隐式图可以定义为一组规则来定义任何指定顶点的所有邻域。”这可以在文章的邻域表示部分中看到。隐式图仅仅是隐式定义的,可以是无限的,也可以是非常大的,而显式图是有限的,并且是预先给定的。隐式图非常适合搜索到某个深度,这是我下一点要讨论的内容

现在我们对隐式图本身有了一个基本概念,我们可以讨论一下您所看到的DFS的运行时间。对于DFS,当我们说隐式图的运行时间是O(b^d)时,要意识到DFS算法本身仍然以几乎相同的方式工作

这里,“b”代表分支因子,“d”代表深度级别。我们只是希望算法只达到一定的深度。Facebook寻找共同朋友的方法就是一个很好的例子。如果我们想要直接的朋友,深度级别应该是1。如果我们想要朋友的朋友,深度级别应该是2。Rubik的立方体拼图也可以用作DFS遍历的“隐式图”,具体取决于立方体的当前状态和未来可能的移动。国际象棋也是一个很好的例子


对于隐式图来说,O(V+E)是一个正确的上界,但是对于O(b^d)界,我们可以更精确地说,对于隐式图,我们基本上只将DFS取到一定的深度。由于隐式图非常大,甚至是无限大,这就解释了为什么我们不想要纯O(V+E)示例。

请参见。我理解为什么运行时间是O(V+E)。我想知道在运行时间O(b^d)时有什么不同。这两个运行时间相关吗??