Algoritma dasar untuk 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
Jadi saya akan berpikir kompleksitas waktu adalah:
v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges)
dimana v
vertex 1
untukn
Pertama, apakah yang saya katakan benar? Kedua, bagaimana ini O(N + E)
, dan intuisi mengapa akan sangat bagus. Terima kasih
DFS (analisis):
O(1)
waktuO(n + m)
waktu asalkan grafik diwakili oleh struktur daftar adjacencyΣv deg(v) = 2m
BFS (analisis):
Li
O(n + m)
waktu asalkan grafik diwakili oleh struktur daftar adjacencyΣv deg(v) = 2m
sumber
Sangat disederhanakan tanpa banyak formalitas: setiap tepi dianggap tepat dua kali, dan setiap simpul diproses tepat satu kali, sehingga kerumitan harus merupakan kelipatan konstan dari jumlah tepi serta jumlah simpul.
sumber
Kompleksitas waktu
O(E+V)
alih-alihO(2E+V)
karena jika kompleksitas waktu adalah n ^ 2 + 2n + 7 maka ditulis sebagai O (n ^ 2).Karenanya, O (2E + V) ditulis sebagai O (E + V)
karena perbedaan antara n ^ 2 dan n penting tetapi tidak antara n dan 2n.
sumber
Saya pikir setiap edge telah dipertimbangkan dua kali dan setiap node telah dikunjungi sekali, jadi total kompleksitas waktu harus O (2E + V).
sumber
Penjelasan intuitif untuk ini adalah dengan hanya menganalisis satu loop:
Jadi total waktu untuk satu loop adalah O (1) + O (e). Sekarang jumlahkan itu untuk setiap simpul karena setiap simpul dikunjungi sekali. Ini memberi
sumber
Penjelasan singkat tapi sederhana:
sumber