प्राइमस (और इसके विपरीत) के विपरीत मुझे क्रुसकल का उपयोग कब करना चाहिए?


193

मैं सोच रहा था कि किसी को प्राइम के एल्गोरिथ्म का उपयोग करना चाहिए और जब क्रुस्कल को न्यूनतम फैले हुए पेड़ को खोजने के लिए? वे दोनों आसान लॉजिक्स, एक ही सबसे खराब मामले हैं, और केवल अंतर कार्यान्वयन है जो थोड़ा अलग डेटा संरचनाओं को शामिल कर सकता है। तो निर्णायक कारक क्या है?

जवाबों:


200

जब आप बहुत सारे किनारों के साथ ग्राफ रखते हैं तो प्राइम के एल्गोरिथ्म का उपयोग करें।

वी कोने किनारों के साथ एक ग्राफ के लिए , क्रुस्काल का एल्गोरिथ्म ओ (ई लॉग वी) समय में चलता है और प्राइम का एल्गोरिथ्म ओ (ई + वी लॉग वी) परिशोधन समय में चल सकता है, यदि आप एक फाइबोनैचि हीप का उपयोग करते हैं ।

प्राइम का एल्गोरिथ्म सीमा में काफी तेज है जब आपको वर्टीकल की तुलना में कई अधिक किनारों वाला वास्तव में घना ग्राफ मिला है। क्रुस्लक विशिष्ट स्थितियों (विरल रेखांकन) में बेहतर प्रदर्शन करता है क्योंकि यह सरल डेटा संरचनाओं का उपयोग करता है।


8
मैं औसत के बजाय "विशिष्ट स्थितियों" को कहूंगा .. मुझे लगता है कि यह उपयोग करने के लिए एक अस्पष्ट शब्द है, उदाहरण के लिए एक हैश तालिका का "औसत आकार" क्या है? कोई जानकारी नहीं।
यारचू

2
@SplittingField: मेरा मानना ​​है कि आप सेब और संतरे की तुलना कर रहे हैं। परिशोधित विश्लेषण, फ़ंक्शन का माप प्राप्त करने का एक तरीका है (इसलिए बोलने के लिए) --- क्या यह सबसे खराब मामला है या औसत मामला इस बात पर निर्भर है कि आप क्या साबित कर रहे हैं। वास्तव में (जैसा कि मैं अब इसे देखता हूं), विकी लेख भाषा का उपयोग करता है जिसका अर्थ है कि इसका उपयोग केवल सबसे खराब स्थिति के विश्लेषण के लिए किया जाता है। अब, इस तरह के विश्लेषण का उपयोग करने का मतलब है कि आप किसी विशेष ऑपरेशन की लागत के बारे में मजबूत वादे नहीं कर सकते हैं, लेकिन जब तक एल्गोरिथ्म किया जाता है, तब तक यह वास्तव में O (E + VlogV), सबसे खराब स्थिति में भी होगा।
Agorenst

10
यह सिद्धांत में अच्छा लगता है, लेकिन मुझे यकीन है कि कुछ लोग एक फिबोनाची ढेर को लागू कर सकते हैं
अलेक्जेंड्रू

2
@tgamblin, सबसे खराब स्थिति में C (V, 2) किनारे हो सकते हैं। तो क्या प्राइमर के एल्गोरिथ्म का समय संकलन ओ (V ^ 2 + VlogV) यानी O (V ^ 2) के लिए नहीं है, जो कि हाईप के मामले में है?
ग्रीन गोब्लिन

7
एक अन्य महत्वपूर्ण कारक यह भी है: Prims का आउटपुट केवल MST है यदि ग्राफ़ जुड़ा हुआ है (आउटपुट का मुझे कोई फायदा नहीं है अन्यथा), लेकिन क्रुस्ल का आउटपुट न्यूनतम स्पैनिंग फ़ॉरेस्ट (कुछ उपयोग के साथ) है।
आंद्रेई I

100

मुझे नेट पर एक बहुत अच्छा धागा मिला जो बहुत ही सरल तरीके से अंतर को बताता है: http://www.thestudentroom.co.uk/showthread.php?t=232168

क्रुस्लकाल का एल्गोरिथ्म अगले सबसे सस्ते किनारे को जोड़कर सबसे सस्ते किनारे से एक समाधान विकसित करेगा, बशर्ते कि यह एक चक्र न बनाए।

प्राइम का एल्गोरिथ्म एक सस्ता वर्टेक्स से अगले सबसे सस्ते वर्टेक्स को जोड़कर एक सॉल्यूशन बढ़ाएगा, वह वर्टेक्स जो फिलहाल सॉल्यूशन में नहीं है लेकिन सबसे सस्ते किनारे से जुड़ा है।

यहाँ संलग्न उस विषय पर एक दिलचस्प पत्रक है।यहां छवि विवरण दर्ज करेंयहां छवि विवरण दर्ज करें

यदि आप क्रुसल और प्राइम दोनों को उनके इष्टतम रूप में कार्यान्वित करते हैं: क्रमशः एक मिल जाए और एक फ़ाइबोनकेशी ढेर के साथ, तो आप ध्यान देंगे कि प्राइमर की तुलना में क्रुस्ल को कैसे लागू करना आसान है।

प्राइमर मुख्य रूप से एक रिटायर हीप के साथ कठिन है, क्योंकि आपको ग्राफ नोड्स और हीप नोड्स के बीच द्वि-दिशात्मक लिंक को रिकॉर्ड करने के लिए एक पुस्तक-रखने की मेज को बनाए रखना होगा। यूनियन फाइंड के साथ, यह विपरीत है, संरचना सरल है और यहां तक ​​कि लगभग बिना किसी अतिरिक्त लागत के सीधे mst का उत्पादन कर सकती है।


2
नाइटपिक: प्रत्येक में अंतिम 'स्लाइड' पढ़ना चाहिए "जब तक आपके पास एक फैले हुए पेड़ नहीं है"; एमएसटी तक नहीं, जो एक पुनरावर्ती कार्य का कुछ है - मुझे कैसे पता चलेगा कि यह न्यूनतम है - यही कारण है कि मैं प्राइम के / क्रुस्कल के साथ शुरू करने के लिए अनुसरण कर रहा हूं!
OJFord

@ ऑलीफोर्ड ने मुझे यह धागा प्राइम और क्रुस्कल एल्गोरिदम का एक सरल चित्रण खोजने के लिए मिला। एल्गोरिदम गारंटी देता है कि आपको एक पेड़ मिलेगा और वह पेड़ एक एमएसटी है। और तुम जानते हो कि तुमने एक वृक्ष पाया है जब तुम बिलकुल V-1 किनारे होते हो।
mikedu95

@ mikedu95 आप सही हैं, एक अलग कोण से मेरी पहले की टिप्पणी के समान बिंदु बना रहे हैं।
ओजफ़र्ड

लेकिन क्या यह पूर्वधारणा नहीं है कि आपको केवल एक ही वजन के बीच चयन करना है, आप ऊपर दिए गए ग्राफ से एक से अधिक बार वजन 2 चुन सकते हैं, आपको अगला वजन ex: 3 @Snicolas
ai0904071

30

मुझे पता है कि आपने इसके लिए नहीं कहा था, लेकिन यदि आपके पास अधिक प्रसंस्करण इकाइयाँ हैं, तो आपको हमेशा बोरवका के एल्गोरिथ्म पर विचार करना चाहिए , क्योंकि यह आसानी से समानांतर हो सकता है - इसलिए इसका क्रुस्कल और जरनैक-प्राइम एल्गोरिथ्म पर प्रदर्शन लाभ है।


23

अगर किनारों को रेखीय समय में क्रमबद्ध किया जा सकता है, या पहले से ही हल किया जाता है, तो क्रुस्काल का बेहतर प्रदर्शन हो सकता है।

किनारों से लेकर कोने तक की संख्या अधिक होने पर प्राइम का बेहतर होना।


19

क्रुस्काल समय जटिलता सबसे खराब स्थिति हे (ई लॉग ई) , यह इसलिए है क्योंकि हमें किनारों को सॉर्ट करने की आवश्यकता है। प्राइम टाइम जटिलता सबसे खराब स्थिति ओ (ई लॉग वी) प्राथमिकता कतार के साथ या उससे भी बेहतर है, फाइबोनैचि हीप के साथ ओ (ई + वी लॉग वी) । जब ग्राफ विरल हो, तो किनारों की iesmall संख्या, जैसे कि E = O (V), जब किनारों को पहले से ही सॉर्ट किया जाता है या यदि हम उन्हें रैखिक समय में सॉर्ट कर सकते हैं, तो हमें क्रुस्कल का उपयोग करना चाहिए। ग्राफ के सघन होने पर हमें प्राइम का उपयोग करना चाहिए, यानी किनारों की संख्या अधिक है, जैसे ई = ओ (वी²)।


यह मुझे दिखता है कि प्राइम क्रुस्लम-वार की तुलना में कभी भी बदतर नहीं है। चूँकि E कम से कम V-1 होना चाहिए इसलिए एक फैले हुए वृक्ष है। मुझे लगता है कि विरल ग्राफ के लिए क्रुस्कल को पसंद करने का कारण यह है कि इसकी डेटा संरचना सरल है।
यू गु गु

16

यदि हम एल्गोरिथ्म को बीच में रोकते हैं तो प्राइमरी का एल्गोरिथ्म हमेशा जुड़ा हुआ पेड़ उत्पन्न करता है, लेकिन दूसरी ओर क्रुस्लक काट दिया गया पेड़ या जंगल दे सकता है


5

क्रुस्कल के एल्गोरिथ्म का एक महत्वपूर्ण अनुप्रयोग एकल लिंक क्लस्टरिंग में है

N कोने पर विचार करें और आपके पास एक पूर्ण ग्राफ है। उन n बिंदुओं के ak क्लस्टर प्राप्त करें। क्रूनकल के एल्गोरिथ्म के पहले n- (k-1) किनारों के सॉर्ट किए गए सेट के किनारों। आप अधिकतम के साथ ग्राफ के k- क्लस्टर प्राप्त करते हैं। रिक्ति।


3

क्रुस्लकाल का सबसे अच्छा समय O (E logV) है। प्राइम के फ़ाइबर हीप्स के इस्तेमाल से हम O (E + V lgV) प्राप्त कर सकते हैं। इसलिए एक घने ग्राफ पर, प्राइम बेहतर है।


2

अधिक घने रेखांकन के लिए प्राइम बेहतर है, और इसमें हमें किनारे जोड़कर चक्रों पर ज्यादा ध्यान देने की आवश्यकता नहीं है, क्योंकि हम मुख्य रूप से नोड्स के साथ काम कर रहे हैं। प्राइम्स जटिल ग्राफ के मामले में क्रुस्कल की तुलना में तेज़ है।


2

क्रुस्क्कल अल्गोरिद्म में हमारे पास दिए गए ग्राफ पर किनारों की संख्या और वर्टिकल की संख्या होती है, लेकिन प्रत्येक किनारे पर हमारी ओर से कुछ मूल्य या वजन होता है, जिससे हम एक नया ग्राफ तैयार कर सकते हैं, जिसे किसी भी तरफ से चक्रीय या बंद नहीं होना चाहिए उदाहरण के लिए

ग्राफ इस तरह _____________ | | | | | | | __________ | | किसी भी शीर्ष को नाम दें a, b, c, d, e, f।

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