Time complexity 最坏情况运行时间BFS

Time complexity 最坏情况运行时间BFS,time-complexity,breadth-first-search,Time Complexity,Breadth First Search,我对BFS的复杂性感到困惑。Wikipédia说:“时间复杂度可以表示为O(|V|+|E|),因为在最坏的情况下,每个顶点和每个边都会被探索。” 对我来说,最坏的情况是:每个顶点都连接到所有顶点 因此while循环将执行V次,for循环执行E次。最坏的情况是0(VE) 我做错了什么 BFS的时间复杂度为O(|V|+|E|)。V是总顶点数,E是总边数。您可能会误认为E.E不是顶点u的相邻边 我们可以按如下方式实现这一点 对于顶点中的每个u 对于相邻(u)中的每个e BFS的目的是访问所有节点一次。

我对BFS的复杂性感到困惑。Wikipédia说:“时间复杂度可以表示为O(|V|+|E|),因为在最坏的情况下,每个顶点和每个边都会被探索。”

对我来说,最坏的情况是:每个顶点都连接到所有顶点 因此while循环将执行V次,for循环执行E次。最坏的情况是0(VE)


我做错了什么

BFS的时间复杂度为O(|V|+|E|)。V是总顶点数,E是总边数。您可能会误认为E.E不是顶点u的相邻边

我们可以按如下方式实现这一点

对于顶点中的每个u

对于相邻(u)中的每个e


BFS的目的是访问所有节点一次。没有顶点第二次进入队列(这解释了| V |)。总和的| E |来自于这样一种假设,即与一次访问相比,检查事件边缘不需要任何成本。因此,是的,对于一个完整的图(所有顶点都连接到所有其他顶点),将检查VE边……但检查它们并不需要花费一次访问。

E是图中的所有边。因此,在您的示例中,|E |=|V |*(|V |-1)。在第二个循环中:“对于邻居(u)中的每个E”,如果u的邻居是所有顶点(在所有顶点都连接到所有其他顶点的情况下)。我们不是在O(VE)中吗?E是图中的总边数。E不是图中具有顶点的边数。所以,O(VE)意味着一个顶点与另一个顶点连接,并且具有全部边。这是错误的。当我们访问一个顶点时,我们不必检查所有的边。我们只检查顶点的相邻边。我同意你的观点,一次访问比一次检查花费“更多”。但这让我很恼火,对我来说,当我们谈论复杂性时,我们不应该看if visit>check。严格来说,检查是O(1),检查+访问也是O(1)。这就像我们没有考虑所有检查为假的迭代一样。如果是这样的话,这种假设应该是精确的。无论如何,谢谢你的回答;)。
set start vertex to visited

load it into queue

while queue not empty

    for each edge incident to vertex

         if its not visited

             load into queue

             mark vertex
do something.