2013-09-04 7 views
9

कुछ स्यूडोकोड यहाँओ (वी * ई) के बजाय बीएफएस ओ (वी + ई) की जटिलता क्यों है?

v1 से शुरू (मेरी शैली उपेक्षा) (कतारबद्ध):

function BFS(queue Q) 
    v2 = dequeue Q 
    enqueue all unvisited connected nodes of v2 into Q 
    BFS(Q) 
end // maybe minor problems here 

चूंकि ग्राफ में वी कोने हैं, और ये वी कोने ई किनारों से जुड़े हैं, और विजिटिंग हो रही जुड़े नोड्स (जुड़े हुए किनारों के दौरे के बराबर) आंतरिक पाश में है (बाहरी पाश खुद ही रिकर्सन है), ऐसा लगता है कि जटिलता ओ (वी + ई) की बजाय ओ (वी * ई) होना चाहिए। क्या कोई इसे मेरे लिए समझा सकता है?

+0

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

+0

इसमें चक्रों से बचने के लिए एक तंत्र शामिल है –

उत्तर

8

ई प्रत्येक चरम के निकट किनारों की संख्या नहीं है - इसकी वास्तव में ग्राफ में किनारों की कुल संख्या है। इसे इस तरह परिभाषित करना उपयोगी है क्योंकि आपके पास प्रत्येक कशेरुक पर समान संख्या में किनारों की आवश्यकता नहीं है।

चूंकि डीएफएस समाप्त होने तक प्रत्येक किनारे का दौरा किया जाता है, इसलिए आपको उस भाग से ओ (ई) जटिलता मिलती है। फिर आप प्रत्येक चरम पर जाने के लिए ओ (वी) जोड़ते हैं और कुल मिलाकर ओ (वी + ई) प्राप्त करते हैं।

+3

आपका उत्तर थोड़ा अधिक सामान्य है - यह गहराई से पहले खोज (डीएफएस) और चौड़ाई-पहली खोज (बीएफएस) दोनों से संबंधित हो सकता है। हो सकता है कि आपने बीएफएस को आपके उत्तर में डीएफएस के रूप में गलत तरीके से गलत बताया है (ध्यान दें कि सवाल बीएफएस के लिए पूछ रहा था)। – yasen

संबंधित मुद्दे