O algoritmo básico para BFS:
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
Então, eu acho que a complexidade do tempo seria:
v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges)
onde v
é vértice 1
den
Em primeiro lugar, o que eu disse correto? Em segundo lugar, como é isso O(N + E)
e a intuição sobre o porquê seria realmente agradável. obrigado
DFS (análise):
O(1)
tempoO(n + m)
tempo, desde que o gráfico seja representado pela estrutura da lista de adjacênciasΣv deg(v) = 2m
BFS (análise):
Li
O(n + m)
tempo, desde que o gráfico seja representado pela estrutura da lista de adjacênciasΣv deg(v) = 2m
fonte
Muito simplificado, sem muita formalidade: toda aresta é considerada exatamente duas vezes e todo nó é processado exatamente uma vez, portanto, a complexidade deve ser um múltiplo constante do número de arestas e do número de vértices.
fonte
A complexidade do tempo é
O(E+V)
substituídaO(2E+V)
porque, se a complexidade do tempo for n ^ 2 + 2n + 7, será escrita como O (n ^ 2).Portanto, O (2E + V) é escrito como O (E + V)
porque a diferença entre n ^ 2 e n é importante, mas não entre n e 2n.
fonte
Eu acho que todas as arestas foram consideradas duas vezes e todos os nós foram visitados uma vez; portanto, a complexidade total do tempo deve ser O (2E + V).
fonte
Uma explicação intuitiva para isso é simplesmente analisando um único loop:
Portanto, o tempo total para um loop único é O (1) + O (e). Agora some-o para cada vértice, pois cada vértice é visitado uma vez. Isto dá
fonte
Explicação curta, mas simples:
fonte