当前位置: 首页 > 知识库问答 >
问题:

无向图复杂性的DFS

邵兴文
2023-03-14

假设我有一个有V节点和E边的无向图。如果我用邻接列表表示图形,如果我有x和y之间边的表示,我还必须在邻接列表中有y和x之间边的表示。

我知道有向图的DFS具有VE复杂性。对于无向图,它没有v 2*e复杂性,因为您访问每个边2次?抱歉,如果这是一个愚蠢的问题...我真的很想明白这个想法。谢谢你,

共有1个答案

赫连冠玉
2023-03-14

复杂度通常表示为O(| V | | E |),这不受因子2的影响。

但是因子2实际上是存在的。一条无向边仅作用于第2行定向边。例如,(对于连通无向图)的算法是

visit(v) {
  mark(v)
  for each unmarked w adjacent to v, visit(w)
}

for循环将考虑每一个边缘入射到每个顶点一次。由于每个无向边都与两个顶点相关,因此显然会考虑两次!

注意,无向DFS不必担心从所有源重新启动。可以拾取任何顶点。

 类似资料:
  • 如果我有下面的for循环: 我知道外环将迭代次,而内环将为每th从外环迭代一次。 因此,为了确定时间复杂度,我们有一些类似于 不确定如何继续并得到一个封闭形式的时间复杂度。

  • 这本书的论点是,复杂性科学是一种“新型科学”,我借鉴自 Stephen Wolfram。

  • 我在这里读到,对于无向图,当表示为邻接表时,空间复杂度是,其中和分别是顶点和边的个数。 我的分析是,对于一个完全连通的图,列表中的每个条目将包含节点,那么我们总共有顶点,因此,空间复杂度似乎是这似乎是我在这里遗漏了什么?

  • 问题内容: 我想知道使用 构造函数构造BigInteger* 对象的性能/ 复杂性 。 * 请考虑以下方法: 此方法在开头创建带有数字的String对象,并且每次迭代都会增加它的数量。它测量并输出构造相应对象所需的时间。 在我的机器(Intel Core i5 660,JDK 6 Update 25 32位)上,输出为: 尽管忽略了高达10 ^ 5的行(由于(处理器)缓存效果,JIT编译等可能引入

  • 问题:哪一个复杂性有我的作用?如何找出算法的时间复杂度? 该函数检查给定的int数组是否已排序。 我的代码:

  • 在研究合并k个排序的连续数组/向量的问题以及它在实现上与合并k个排序的链表有何不同时,我发现了两个相对简单的用于合并k个连续数组的朴素解决方案和一个基于成对合并的很好的优化方法,该方法模拟了mergeSort()的工作原理。我实现的两个朴素解决方案似乎具有相同的复杂性,但在我进行的一个大型随机测试中,似乎一个比另一个效率更低。 我天真的合并方法如下所示。我们创建一个输出向量 我的第二个天真解决方案