ईमानदारी से, मैं विश्वास नहीं कर सकता कि यह पहले से ही नहीं पूछा गया है, लेकिन यहाँ यह है
पृष्ठभूमि
एक साधारण अप्रत्यक्ष प्लानर (ग्राफ को बिना चौराहों के प्लेन में खींचा जा सकता है) को देखते हुए , यह एक सिद्ध प्रमेय है कि ग्राफ 4-रंगीन है, एक शब्द जिसे हम थोड़ा सा एक्सप्लोर करेंगे। हालाँकि, ग्राफ को 5-रंग करना बहुत आसान है, जो कि आज हम अपनी चुनौती पर ध्यान केंद्रित करेंगे।
ग्राफ का एक मान्य k- रंग निम्नलिखित गुणों के साथ ग्राफ के नोड्स को "रंग" का एक असाइनमेंट है
- यदि दो नोड्स एक किनारे से जुड़े होते हैं, तो नोड्स अलग-अलग रंगों से रंगे होते हैं।
- ग्राफ के उस पार, अधिकतम 5 रंग हैं।
इसे देखते हुए, मैं आपको 5-रंग के किसी भी सरल अप्रत्यक्ष प्लानर ग्राफ के लिए एक बहुत ही बुनियादी एल्गोरिथ्म प्रस्तुत करूंगा। इस एल्गोरिथ्म के लिए निम्नलिखित परिभाषाओं की आवश्यकता होती है
रीचैबिलिटी : यदि नोड 1 नोड 2 से पहुंच योग्य है, तो इसका मतलब है कि नोड का एक क्रम है, प्रत्येक को एक किनारे से जोड़ा जाता है, जैसे कि पहला नोड नोड 2 है और अंतिम नोड 1 है। नोट करें कि अप्रत्यक्ष ग्राफ़ के बाद से सममित हैं, यदि नोड 1 नोड 2 से पहुंच योग्य है, तो नोड 2 नोड 1 से पहुंच योग्य है।
सबग्राफ : किसी दिए गए सेट के नोड्स एन के ग्राफ का एक सबग्राफ एक ग्राफ होता है, जहां सबग्राफ के नोड्स सभी N में होते हैं, और मूल ग्राफ से एक बढ़त सबग्राफ में होती है यदि और केवल दोनों नोड्स किनारे से जुड़े होते हैं एन में हैं।
चलो रंग (एन) 5 रंगों के साथ एन नोड्स के साथ प्लानेर ग्राफ को रंगने के लिए एक फ़ंक्शन है। हम नीचे फ़ंक्शन को परिभाषित करते हैं
- नोड को कम से कम संख्या से जुड़ा हुआ खोजें। इस नोड में इससे जुड़े अधिकांश 5 नोड होंगे।
- इस नोड को ग्राफ से निकालें।
- इसे रंगीन करने के लिए इस नए ग्राफ पर कॉल कलर (N-1) करें।
- हटाए गए नोड को ग्राफ़ में वापस जोड़ें।
- यदि संभव हो तो, जोड़े गए नोड को एक रंग में रंग दें जो इसके जुड़े नोड्स में से कोई भी नहीं है।
- यदि संभव नहीं है, तो जोड़े गए नोड के सभी 5 पड़ोसी नोड्स में 5 अलग-अलग रंग हैं, इसलिए हमें निम्नलिखित प्रक्रिया का प्रयास करना चाहिए।
- जोड़े गए नोड n1 के आसपास के नोड्स की संख्या ... n5
- मूल ग्राफ में सभी नोड्स के सबग्राफ पर विचार करें जो n1 या n3 के समान रंग का है।
- यदि इस उपसमूह में, n3 n1 से उपलब्ध नहीं है, तो n1 (n1 सहित) से उपलब्ध नोड्स के सेट में, n1 के रंग की सभी घटनाओं को n3 और इसके विपरीत से बदल दें। अब जोड़े गए नोड n1 के मूल रंग को रंग दें।
- यदि n3 इस नए ग्राफ में n1 से उपलब्ध था, तो n1 और n4 के बजाय नोड्स n2 और n4 पर चरण 9 से प्रक्रिया करें।
चुनौती
प्रत्येक नोड का मान निर्दिष्ट करके, एक एजेलिस्ट (एक ग्राफ का प्रतिनिधित्व) के इनपुट को देखते हुए, ग्राफ को रंग दें।
इनपुट : ग्राफ़ में किनारों की एक सूची (यानी, [('a','b'),('b','c')...]
)
ध्यान दें कि इनपुट एडजेलिस्ट ऐसा होगा यदि (ए, बी) सूची में है, (बी) ए सूची में नहीं है।
आउटपुट : मानों के जोड़े वाली एक वस्तु, जहां प्रत्येक जोड़ी का पहला तत्व एक नोड है, और दूसरा इसका रंग, [('a',1),('b',2)...]
या ,{'a':1,'b':2,...}
आप रंगों का प्रतिनिधित्व करने के लिए, संख्याओं से, वर्णों तक, किसी भी चीज़ के लिए कुछ भी उपयोग कर सकते हैं।
इनपुट और आउटपुट काफी लचीला है, जब तक कि यह काफी स्पष्ट है कि इनपुट और आउटपुट क्या हैं।
नियम
- यह एक कोड-गोल्फ चुनौती है
- आपको ऊपर वर्णित एल्गोरिथ्म का उपयोग करने की आवश्यकता नहीं है। यह केवल संदर्भ के लिए है।
- किसी भी ग्राफ के लिए, अक्सर उन्हें रंग देने के कई वैध तरीके होते हैं। जब तक आपके एल्गोरिथ्म में निर्मित रंग वैध है, तब तक यह स्वीकार्य है।
- याद रखें कि ग्राफ 5-रंगीन होना चाहिए।
परीक्षण के मामलों
अपने रंग परिणामों की वैधता का परीक्षण करने के लिए निम्न कोड का उपयोग करें । जैसा कि प्रति ग्राफ़ में कई मान्य ग्राफ़ रंग हैं, यह एल्गोरिथम बस रंग की वैधता की जांच करता है। कोड का उपयोग करने के तरीके को देखने के लिए डॉकस्ट्रिंग देखें।
कुछ यादृच्छिक (और बल्कि मूर्खतापूर्ण) परीक्षण के मामले :
टेस्ट केस 2: क्रैकहार्ट पतंग ग्राफ
[(0, 1), (0, 2), (0, 3), (0, 5), (1, 3), (1, 4), (1, 6), (2, 3), (2, 5), (3, 4), (3, 5), (3, 6), (4, 6), (5, 6), (5, 7), (6, 7), (7, 8), (8, 9)]
एक मान्य आउटपुट:
{0: 4, 1: 3, 2: 3, 3: 2, 4: 4, 5: 1, 6: 0, 7: 4, 8: 3, 9: 4}
नोट : ये परीक्षण के मामले रंग एल्गोरिथ्म के अधिक बारीक व्यवहार का परीक्षण करने के लिए बहुत छोटे हैं, इसलिए अपने स्वयं के रेखांकन का निर्माण करना शायद आपके काम की वैधता का एक अच्छा परीक्षण है।
नोट 2 : मैं कोड का एक और टुकड़ा जोड़ूंगा जो आपके रंग समाधान को जल्द ही चित्रित करेगा।
नोट 3 : मैंने यादृच्छिक रंग एल्गोरिदम प्रस्तुत नहीं किया है, जो कि पीपीसीजी के बारे में बहुत अच्छा है! हालांकि, अगर कोई और अधिक नियतात्मक एल्गोरिथ्म गोल्फ कर सकता है, तो वह बहुत अच्छा होगा।
5
करने के लिए 4
, और उन्हें पुनः सबमिट करें।