Data structures 为什么DFS和BFS的时间复杂度取决于图形的表示方式?

Data structures 为什么DFS和BFS的时间复杂度取决于图形的表示方式?,data-structures,graph,time-complexity,graph-algorithm,breadth-first-search,Data Structures,Graph,Time Complexity,Graph Algorithm,Breadth First Search,该网站描述,当使用邻接列表时,DFS和BFS的复杂性为O(V+E),如果使用邻接矩阵,复杂性为O(V2)。这是为什么?在这两种情况下,运行时取决于在给定节点的传出边缘上迭代所需的时间。对于邻接列表,运行时与输出边的数量成正比。由于每个节点访问一次,因此成本是节点数加上边数,即O(m+n)。对于am邻接矩阵,查找所有传出边所需的时间为O(n),因为必须检查节点行中的所有n列。将所有n个节点相加,得到O(n2) 希望这有帮助 您必须注意,对于探索每个顶点,探索所需的时间仅等于c*x,其中x是顶点的指

该网站描述,当使用邻接列表时,DFS和BFS的复杂性为O(V+E),如果使用邻接矩阵,复杂性为O(V2)。这是为什么?

在这两种情况下,运行时取决于在给定节点的传出边缘上迭代所需的时间。对于邻接列表,运行时与输出边的数量成正比。由于每个节点访问一次,因此成本是节点数加上边数,即O(m+n)。对于am邻接矩阵,查找所有传出边所需的时间为O(n),因为必须检查节点行中的所有n列。将所有n个节点相加,得到O(n2)


希望这有帮助

您必须注意,对于探索每个顶点,探索所需的时间仅等于c*x,其中x是顶点的指数。因为我们感兴趣的是寻找总体复杂性,对于n个节点,总体时间将是c1*x1+c2*x2…cnxn。取max(ci)=d,我们发现总时间DFS和BFS的时间复杂度可计算如下:

对每个顶点及其对应的关联边迭代一次,因此总时间复杂度将为->

时间复杂度=v1+(v1上的事件边缘)+v2+(v2上的事件边缘)+vn+(vn上的事件_边)

现在可以将其重新组合为->(v1+v2+v3+..vn)+(v1上的事件_边+v2上的事件_边+..vn上的事件_边)

因此,总的时间复杂度将变成=(v1+v2+v3+..…vn)+(v1上的事件_边+v2上的事件_边+..vn上的事件_边)

(v1+v2+…+vn)=V或n(顶点总数)

对于邻接列表表示法:

(v1上的事件_边+v2上的事件_边+vn上的事件_边)=E(总边数)

因此,对于邻接列表表示,时间复杂度将为O(V+E)

对于邻接矩阵表示法:

要访问相应节点(行)的邻居,我们需要迭代特定行的所有列,该行的值为V

所以,(v1上的入射边+v2上的入射边+…vn上的入射边)=V+V+。。。。第V次时间V)=V*V


因此时间复杂度将是O(V+V^2)=O(V^2)

非常感谢,我知道了。。。我非常困惑,因为在维基百科上,空间复杂度O(n+m)被描述为邻接列表和O(n^2)邻接矩阵,但时间复杂度被定义为O(n+m).@templatetypedef介意看一下吗?这个问题似乎离题了,因为它与计算机程序或编程语言无关。^L真的吗,伙计?“因此时间复杂性将是O(V+V^2)=O(V^2)”是关键。这是一个很好的解释。