Neden hem DFS hem de BFS O (V + E) için zaman karmaşıklığı


132

BFS için temel algoritma:

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

Bu yüzden zaman karmaşıklığının şöyle olacağını düşünürdüm:

v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges) 

nerede vverteksidir 1içinn

İlk olarak, söylediğim doğru mu? İkincisi, bu nasıl O(N + E)ve neden gerçekten güzel olacağına dair sezgi. Teşekkürler

Yanıtlar:


268

Senin toplamın

v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges)

olarak yeniden yazılabilir

(v1 + v2 + ... + vn) + [(incident_edges v1) + (incident_edges v2) + ... + (incident_edges vn)]

ve birinci grup, O(N)diğeri ise O(E).


1
Ama her köşe kuyruktan çıkarılmalıdır ve bu log (| Q |) Bu kısım ne olacak?
Yola

3
log (| Q |) <log (N) <N, bu nedenle asimptotik terimi güvenle yok sayabilirsiniz
Mihai Maruseac

2
Bir bitişiklik listesinde, her köşe diğer tüm köşelere bağlanırsa, karmaşıklık O (V + E) = O (V + V ^ 2) = O (V ^ 2) şeklinde olur. E = V ^ 2 çünkü en çok kenar sayısı = V ^ 2.
Maks.

Cevabınıza göre, karmaşıklık O (V + 2E) olmayacak mı? Her kenarın başka bir kenarla ortak bir kenarı olabileceği için mi?
karansky

2
Sabit terimler kaldırılabilir.
Mihai Maruseac

41

DFS (analiz):

  • Bir köşe / kenar etiketi ayarlamak / almak O(1)zaman alır
  • Her köşe iki kez etiketlenir
    • Keşfedilmemiş olarak bir kez
    • bir kez ZİYARET EDİLDİ
  • Her kenar iki kez etiketlenir
    • Keşfedilmemiş olarak bir kez
    • KEŞİF veya GERİ olarak bir kez
  • Method incidentEdges her köşe için bir kez çağrılır
  • DFS O(n + m), grafiğin bitişik liste yapısıyla temsil edilmesi koşuluyla zamanında çalışır
  • Hatırlamak Σv deg(v) = 2m

BFS (analiz):

  • Bir köşe / kenar etiketi ayarlamak / almak O (1) süresi alır
  • Her köşe iki kez etiketlenir
    • Keşfedilmemiş olarak bir kez
    • bir kez ZİYARET EDİLDİ
  • Her kenar iki kez etiketlenir
    • Keşfedilmemiş olarak bir kez
    • KEŞİF veya ÇAPRAZ olarak bir kez
  • Her köşe bir diziye bir kez eklenir Li
  • Method incidentEdges her köşe için bir kez çağrılır
  • BFS O(n + m), grafiğin bitişik liste yapısı ile temsil edilmesi koşuluyla zamanında çalışır.
  • Hatırlamak Σv deg(v) = 2m

ben hala :) düzenlemek ekran ile yönetmek için denemek böylece düzenlemek için tnx burada yeniyim
TheNewOne

1
Grafiklerin bitişik liste yapısı ile temsil edileceğini belirterek spesifik olduğu için teşekkürler, DFS'nin neden O (n + m) olduğunu düşünürdüm, O (n + 2m) olduğunu düşünürdüm çünkü her bir kenar iki kez geçilir geri izleme ile.
mib1413456

22

Fazla formalite olmadan çok basitleştirilmiş: her kenar tam olarak iki kez değerlendirilir ve her düğüm tam olarak bir kez işlenir, bu nedenle karmaşıklık, köşe sayısının yanı sıra kenar sayısının sabit bir katı olmalıdır.


Google bunun için daha fazla açıklama yapmadan matematik notasyonundan çok daha kolay anlaşılır.
mLstudent33

11

Zaman karmaşıklığı bunun O(E+V)yerine O(2E+V), zaman karmaşıklığı n ^ 2 + 2n + 7 ise O (n ^ 2) olarak yazılmasıdır.

Dolayısıyla O (2E + V), O (E + V) olarak yazılır.

çünkü n ^ 2 ile n arasındaki fark önemlidir, ancak n ile 2n arasındaki fark değildir.


@Am_I_Helpful biri yukarıda 2E'yi büyük-oh notasyonunda soruyor .... bu yüzden zaman karmaşıklığı içinde 2 sayılmaz.
Dhruvam Gupta

@Am_I_Helpful sadece cevabımın üzerindeki gönderiye bakın .... orada Kehe CAI adlı kullanıcı "Sanırım her uç iki kez değerlendirildi ve her düğüm bir kez ziyaret edildi, bu nedenle toplam zaman karmaşıklığı O (2E + V )." Ben de buna göre cevap verdim .... Anladım !!!
Dhruvam Gupta

Olumsuz oyumu yalnızca cevabınızı düzenlediğiniz için kaldırdım ,
Am_I_Helpful

3

Bence her kenar iki kez değerlendirildi ve her düğüm bir kez ziyaret edildi, bu nedenle toplam zaman karmaşıklığı O (2E + V) olmalıdır.


Ben bile aynı hissediyorum. Bu konuda daha fazla açıklama yapan var mı?
Chaitanya

12
Büyük O analizi sabiti görmezden gelir. O (2E + V) O (E + V) 'dir.
Hemm

3

Kısa ama basit açıklama:

En kötü durumda, tüm tepe ve kenarı ziyaret etmeniz gerekecek, dolayısıyla en kötü durumda zaman karmaşıklığı O (V + E)


3

Bunun sezgisel bir açıklaması, sadece tek bir döngüyü analiz etmektir:

  1. bir tepe noktasını ziyaret edin -> O (1)
  2. a tüm olay kenarlarında for döngüsü -> O (e) burada e, belirli bir tepe noktasında meydana gelen bir dizi kenardır v.

Dolayısıyla tek bir döngü için toplam süre O (1) + O (e) 'dir. Şimdi, her köşe bir kez ziyaret edildiğinden, her köşe için toplayın. Bu verir

For every V
=> 

    O(1)
    +

    O(e)

=> O(V) + O(E)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.