लगभग एक साल पहले, एक मित्र और मैंने सामान्य बाउंड (पूर्व-सॉर्ट किए गए किनारों को संभालने के बिना तुलना में घने रेखांकन के लिए क्रुस्ल के एल्गोरिथ्म को लागू करने का एक तरीका सोचा । विशेष रूप से, हम प्रीपेड मैट्रिसेस का उपयोग करते हुए प्राइम के समान ही सभी मामलों में प्राप्त करते हैं।
मैंने अपने ब्लॉग में एल्गोरिथ्म के बारे में थोड़ा सा पोस्ट किया है , जिसमें C ++ कोड और बेंचमार्क शामिल हैं, लेकिन यहाँ सामान्य विचार है:
प्रत्येक जुड़े घटक के लिए एक प्रतिनिधि नोड बनाए रखें। प्रारंभ में, सभी नोड स्वयं का प्रतिनिधित्व करते हैं।
एक वेक्टर को बनाए रखें
dist[i]
जैसे कि, हर घटक के लिएi
, सबसे हल्का घटक-क्रॉसिंग एज घटना हैi
।जब विभाजन को पार करने वाले सबसे हल्के किनारे को खोजते हैं, तो बस यह पाते हैं
i
किdist[i]
रैखिक समय में, का वजन कम करता है।
सबसे हल्के किनारे के संकुचन और उक्त किनारे की खोज इस प्रकार दोनों को रैखिक समय में किया जा सकता है। एमएसटी को खोजने के लिए हम इसे बार करते हैं। वास्तव में यह पता लगाने के लिए थोड़ा बहीखाता की आवश्यकता है कि हम किस किनारे को एमएसटी में जोड़ना चाहते हैं, लेकिन जटिलता नहीं बढ़ाते हैं। इस प्रकार रनटाइम । कार्यान्वयन छोरों के लिए सिर्फ एक जोड़ी है।
क्या कृषकाल का यह संस्करण साहित्य में प्रसिद्ध है?