一位朋友告诉我,广度优先搜索算法(由邻接列表表示的图形)具有二次时间复杂度。但是在所有的资料来源中说BFS算法的复杂性恰好是O(| V | + | E |)或O(n + m),我们从中得到二次复杂度?
答案 0 :(得分:1)
所有来源都是正确的:-)使用BFS,您只需访问每个顶点和每个边缘一次,从而产生线性复杂性。现在,如果它是一个完全连通的图形,即每对顶点通过边连接,那么边的数量随着顶点数的增加呈二次方:
|E| = |V| * (|V|-1) / 2
然后可以说BFS的复杂性是顶点数的二次方:O(|V|+|E|) = O(|V|^2)
答案 1 :(得分:1)
BFS是O(E+V)
因此在输入方面给出它是线性时间算法但是如果考虑图的顶点那么在密集图中没有边可以是O(|V|^2)
因此如果我们考虑时间复杂度的话图中的顶点然后BFS是O(|V|^2)
,因此在顶点方面可以被认为是二次的
答案 2 :(得分:0)
O(n + m)在复杂性上是线性的而不是二次的。 O(n * m)是二次的。 最初所有顶点都标记为未访问。我们从给定顶点开始作为当前顶点。 1. BFS将覆盖(访问)所有相邻的未访问顶点到当前顶点排队这些子节点。 2.然后它会将当前顶点标记为“已访问”,以便可能无法访问它(再次排队)。 然后,BFS将从队列中取出第一个顶点,并重复从1开始的步骤,直到不再有未访问的顶点为止。
上述算法的运行时间在总数中是线性的。顶点和边缘在一起,因为算法将访问每个顶点一次并检查其每个边缘一次,因此它将不需要。顶点+没有。边缘步骤完全搜索图表