DFS और BFS O (V + E) दोनों की समय जटिलता क्यों है


132

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

इसलिए मुझे लगता है कि समय की जटिलता होगी:

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

कहां vहै1 करने के लिएn

सबसे पहले, क्या मैंने सही कहा है? दूसरे, यह कैसे है O(N + E), और अंतर्ज्ञान क्यों वास्तव में अच्छा होगा। धन्यवाद

जवाबों:


268

आपका योग

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

के रूप में फिर से लिखा जा सकता है

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

और पहला समूह है O(N)जबकि दूसरा है O(E)


1
लेकिन प्रत्येक शीर्ष को कतार से निकाला जाना चाहिए, और यह लॉग (! Q |) इस भाग के बारे में क्या है?
योला

3
लॉग (| Q |) <लॉग (एन) <एन इसलिए आप
असममित

2
यदि किसी आसन्न सूची में, प्रत्येक शीर्ष सभी अन्य शीर्षों से जुड़ा होता है, तो जटिलता O (V + E) = O (V + V ^ 2) = O (V ^ 2) के समतुल्य होगी। ई = वी ^ 2 क्योंकि किनारों की सबसे अधिक संख्या = वी ^ 2।
अधिकतम

आपके उत्तर के अनुसार, जटिलता O (V + 2E) नहीं बनेगी? चूंकि हर किनारे पर दूसरे किनारे के साथ एक आम बढ़त हो सकती है?
करंस्की

2
निरंतर शर्तों को गिराया जा सकता है।
Mihai Maruseac

41

डीएफएस (विश्लेषण):

  • सेटिंग / एक वर्टेक्स / एज लेबल प्राप्त करना O(1) समय है
  • प्रत्येक शीर्ष को दो बार लेबल किया जाता है
    • एक बार UNEXPLORED के रूप में
    • एक बार के रूप में
  • प्रत्येक किनारे को दो बार लेबल किया गया है
    • एक बार UNEXPLORED के रूप में
    • एक बार DISCOVERY या BACK के रूप में
  • विधि घटनाएडेज को प्रत्येक शीर्ष के लिए एक बार कहा जाता है
  • डीएफएस O(n + m)समय में चलता है बशर्ते ग्राफ आसन्न सूची संरचना द्वारा दर्शाया गया हो
  • याद करें कि Σv deg(v) = 2m

BFS (विश्लेषण):

  • सेटिंग / वर्टेक्स / एज लेबल प्राप्त करने में O (1) समय लगता है
  • प्रत्येक शीर्ष को दो बार लेबल किया जाता है
    • एक बार UNEXPLORED के रूप में
    • एक बार के रूप में
  • प्रत्येक किनारे को दो बार लेबल किया गया है
    • एक बार UNEXPLORED के रूप में
    • एक बार DISCOVERY या CROSS के रूप में
  • प्रत्येक शीर्ष को एक अनुक्रम में एक बार डाला जाता है Li
  • विधि घटनाएडेज को प्रत्येक शीर्ष के लिए एक बार कहा जाता है
  • बीएफएस O(n + m)समय पर चलता है बशर्ते ग्राफ आसन्न सूची संरचना द्वारा दर्शाया गया हो
  • याद करें कि Σv deg(v) = 2m

संपादित करने के लिए tnx मैं यहाँ नया हूँ इसलिए मैं अभी भी संपादन स्क्रीन के साथ प्रबंधित करने की कोशिश करता हूँ :)
TheNewOne

1
विशिष्ट होने के लिए धन्यवाद कि यह उल्लेख करते हुए कि रेखांकन आसन्न सूची संरचना द्वारा दर्शाया जाना है, यह मुझे गुस्सा दिला रहा था कि DFS O (n + m) क्यों है, मुझे लगता है कि यह O (n + 2m) था क्योंकि प्रत्येक किनारे दो बार फंसा होता है पीछे करके।
mib1413456

22

बहुत औपचारिकता के बिना बहुत सरलीकृत: प्रत्येक किनारे को दो बार बिल्कुल सही माना जाता है, और प्रत्येक नोड को एक बार बिल्कुल संसाधित किया जाता है, इसलिए जटिलता को किनारों की संख्या के साथ-साथ कोने की संख्या का लगातार कई होना चाहिए।


Google स्पष्टीकरण की तुलना में आगे की व्याख्या के बिना समझने में बहुत आसान है, हालांकि यह वही है जो Google के लिए है।
mLstudent33

11

समय जटिलता O(E+V)इसके बजाय है O(2E+V)क्योंकि यदि समय जटिलता n ^ 2 + 2n + 7 है तो इसे O (n ^ 2) के रूप में लिखा जाता है।

इसलिए, O (2E + V) को O (E + V) लिखा जाता है

क्योंकि n ^ 2 और n मामलों के बीच अंतर है, लेकिन n और 2n के बीच नहीं।


@Am_I_Helpful कोई ऊपर वाले से 2E में पूछ रहा है ओह-ओ नोटेशन .... इसीलिए 2 को टाइम काम्प्लेक्सिटी में नहीं माना जाता।
ध्रुवम गुप्ता

@Am_I_Helpful सिर्फ मेरे उत्तर के ऊपर की पोस्ट देखें .... वहां केहे CAI नाम के उपयोगकर्ता ने लिखा है "मुझे लगता है कि हर किनारे पर दो बार विचार किया गया है और प्रत्येक नोड को एक बार देखा गया है, इसलिए कुल समय जटिलता O (2+ + V) होनी चाहिए )। " तो मैंने जवाब दिया acordingly .... समझ गया !!!
ध्रुवम गुप्ता

मैंने अपना उत्तर केवल इसलिए हटा दिया क्योंकि आपने अपना उत्तर संपादित किया था,
Am_I_Helpful

3

मुझे लगता है कि हर किनारे पर दो बार विचार किया गया है और प्रत्येक नोड को एक बार देखा गया है, इसलिए कुल समय जटिलता ओ (2 ई + वी) होनी चाहिए।


यहां तक ​​कि मुझे भी ऐसा ही लगता है। क्या कोई इस पर और स्पष्टीकरण दे सकता है?
चैतन्य

12
बिग ओ विश्लेषण निरंतर की अनदेखी करता है। O (2E + V) O (E + V) है।
हेमम

3

इसके लिए एक सहज व्याख्या केवल एक लूप का विश्लेषण करके है:

  1. एक शीर्ष पर जाएँ -> O (1)
  2. सभी घटना किनारों पर लूप के लिए -> ओ (ई) जहां ई दिए गए वर्टेक्स v पर किनारों की एक घटना है।

तो एकल लूप के लिए कुल समय O (1) + O (e) है। अब इसे प्रत्येक शीर्ष के लिए योग करें क्योंकि प्रत्येक शीर्ष को एक बार देखा जाता है। यह देता है

For every V
=> 

    O(1)
    +

    O(e)

=> O(V) + O(E)

2

लघु लेकिन सरल व्याख्या:

मुझे सबसे बुरा मामला है कि आपको सभी शीर्ष और किनारे पर जाने की आवश्यकता होगी इसलिए सबसे खराब स्थिति में समय की जटिलता हे (वी + ई)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.