2010-09-29 15 views
77

दोनों का उपयोग एकल स्रोत से सबसे छोटा रास्ता खोजने के लिए किया जा सकता है। बीएफएस ओ (ई + वी) में चलता है, जबकि डिजस्ट्रा ओ में चलाता है ((वी + ई) * लॉग (वी))।बिडथ फर्स्ट सर्च (बीएफएस) एक ही चीज तेजी से कर सकता है तो डिजस्ट्रा के एल्गोरिदम का उपयोग क्यों करें?

इसके अलावा, मैंने देखा है कि डिज्क्स्ट्रा रूटिंग प्रोटोकॉल में बहुत कुछ इस्तेमाल करता है।

इस प्रकार, डीएफएस एक ही चीज़ को तेजी से कर सकता है, तो डिजस्ट्रा के एल्गोरिदम का उपयोग क्यों करें?

उत्तर

111

डिजस्ट्रा प्रत्येक चरण के लिए 1 से अधिक दूरी को आवंटित करने की अनुमति देता है। उदाहरण के लिए, दूरी (या वजन) को घुमाने में गति, लागत, वरीयता इत्यादि द्वारा आवंटित किया जा सकता है। एल्गोरिदम तब आपको ट्रैवर्स किए गए ग्राफ़ में आपके स्रोत से प्रत्येक नोड तक सबसे छोटा रास्ता देता है।

इस बीच BFS मूल रूप से सिर्फ एक "कदम" द्वारा खोज (लिंक, धार, जो कुछ भी आप अपने आवेदन में यह कॉल करना चाहते हैं) हर यात्रा है, जो कदम की छोटी से छोटी संख्या को खोजने का प्रभाव है करने के लिए होता पर फैलता यह आपके स्रोत ("रूट") से दिए गए किसी भी नोड को प्राप्त करने के लिए लेता है।

+1

दोनों एक ही परिणाम उत्पन्न करेंगे iee दो अक्षरों के बीच एक पथ, लेकिन केवल dijkstra सबसे कम पथ की गारंटी देगा। – Edwin

+0

स्वीकार्य उत्तर, दूसरी टिप्पणी देखें। कम्प्यूटेशनल जटिलता अलग क्यों है यह समझाने का बहुत अच्छा तरीका: https://stackoverflow.com/questions/25449781/what-is-difference-between-bfs-and-dijkstras- एल्गोरिदम-when-looking-for-shorte – jmcarter9t

14

यदि आप यात्रा वेबसाइटों पर विचार करते हैं, तो ये नोड्स पर वजन (दूरी) के कारण डिजस्ट्रा के एल्गोरिदम का उपयोग करते हैं।

यदि आप सभी नोड्स के बीच एक ही दूरी पर विचार करेंगे, तो बीएफएस बेहतर विकल्प है।

उदाहरण के लिए, धार वजन A->B = 10 के द्वारा दिए गए के साथ A -> (B, C) -> (F), A->C = 20, B->F पर विचार = C->F = 5.

यहाँ, अगर हम BFS लागू होते हैं, इस सवाल का जवाब ABF ACF या दोनों के रूप में कर रहे हैं हो जाएगा, सबसे कम पथ (किनारों की संख्या के संबंध में), लेकिन अगर हम डिजस्ट्रा को लागू करते हैं, तो उत्तर केवल एबीएफ होगा क्योंकि यह जुड़े पथ पर भार को मानता है।

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