ग्राफ 5-रंग


14

ईमानदारी से, मैं विश्वास नहीं कर सकता कि यह पहले से ही नहीं पूछा गया है, लेकिन यहाँ यह है

पृष्ठभूमि

एक साधारण अप्रत्यक्ष प्लानर (ग्राफ को बिना चौराहों के प्लेन में खींचा जा सकता है) को देखते हुए , यह एक सिद्ध प्रमेय है कि ग्राफ 4-रंगीन है, एक शब्द जिसे हम थोड़ा सा एक्सप्लोर करेंगे। हालाँकि, ग्राफ को 5-रंग करना बहुत आसान है, जो कि आज हम अपनी चुनौती पर ध्यान केंद्रित करेंगे।

ग्राफ का एक मान्य k- रंग निम्नलिखित गुणों के साथ ग्राफ के नोड्स को "रंग" का एक असाइनमेंट है

  1. यदि दो नोड्स एक किनारे से जुड़े होते हैं, तो नोड्स अलग-अलग रंगों से रंगे होते हैं।
  2. ग्राफ के उस पार, अधिकतम 5 रंग हैं।

इसे देखते हुए, मैं आपको 5-रंग के किसी भी सरल अप्रत्यक्ष प्लानर ग्राफ के लिए एक बहुत ही बुनियादी एल्गोरिथ्म प्रस्तुत करूंगा। इस एल्गोरिथ्म के लिए निम्नलिखित परिभाषाओं की आवश्यकता होती है

रीचैबिलिटी : यदि नोड 1 नोड 2 से पहुंच योग्य है, तो इसका मतलब है कि नोड का एक क्रम है, प्रत्येक को एक किनारे से जोड़ा जाता है, जैसे कि पहला नोड नोड 2 है और अंतिम नोड 1 है। नोट करें कि अप्रत्यक्ष ग्राफ़ के बाद से सममित हैं, यदि नोड 1 नोड 2 से पहुंच योग्य है, तो नोड 2 नोड 1 से पहुंच योग्य है।

सबग्राफ : किसी दिए गए सेट के नोड्स एन के ग्राफ का एक सबग्राफ एक ग्राफ होता है, जहां सबग्राफ के नोड्स सभी N में होते हैं, और मूल ग्राफ से एक बढ़त सबग्राफ में होती है यदि और केवल दोनों नोड्स किनारे से जुड़े होते हैं एन में हैं।

चलो रंग (एन) 5 रंगों के साथ एन नोड्स के साथ प्लानेर ग्राफ को रंगने के लिए एक फ़ंक्शन है। हम नीचे फ़ंक्शन को परिभाषित करते हैं

  1. नोड को कम से कम संख्या से जुड़ा हुआ खोजें। इस नोड में इससे जुड़े अधिकांश 5 नोड होंगे।
  2. इस नोड को ग्राफ से निकालें।
  3. इसे रंगीन करने के लिए इस नए ग्राफ पर कॉल कलर (N-1) करें।
  4. हटाए गए नोड को ग्राफ़ में वापस जोड़ें।
  5. यदि संभव हो तो, जोड़े गए नोड को एक रंग में रंग दें जो इसके जुड़े नोड्स में से कोई भी नहीं है।
  6. यदि संभव नहीं है, तो जोड़े गए नोड के सभी 5 पड़ोसी नोड्स में 5 अलग-अलग रंग हैं, इसलिए हमें निम्नलिखित प्रक्रिया का प्रयास करना चाहिए।
  7. जोड़े गए नोड n1 के आसपास के नोड्स की संख्या ... n5
  8. मूल ग्राफ में सभी नोड्स के सबग्राफ पर विचार करें जो n1 या n3 के समान रंग का है।
  9. यदि इस उपसमूह में, n3 n1 से उपलब्ध नहीं है, तो n1 (n1 सहित) से उपलब्ध नोड्स के सेट में, n1 के रंग की सभी घटनाओं को n3 और इसके विपरीत से बदल दें। अब जोड़े गए नोड n1 के मूल रंग को रंग दें।
  10. यदि 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 : मैंने यादृच्छिक रंग एल्गोरिदम प्रस्तुत नहीं किया है, जो कि पीपीसीजी के बारे में बहुत अच्छा है! हालांकि, अगर कोई और अधिक नियतात्मक एल्गोरिथ्म गोल्फ कर सकता है, तो वह बहुत अच्छा होगा।


3
पीटरसन और च्वॉटल ग्राफ नॉनप्लेनर नहीं हैं?
क्रॉपेब

1
@NicHartley निकटवर्ती मैट्रिसेस पर प्रभावी रूप से रंग रेखांकन करने के लिए अच्छी तरह से ज्ञात पारगमन आधारित संचालन हैं। मैं एक कागज मिल जब मैं एक मिल जाएगा।
डॉन थाउजेंड

1
मुझे लगता है कि आप बहुपद के समय के समाधान को प्रतिबंधित करने या किसी बड़े परीक्षण के मामले को सफलतापूर्वक चलाने के लिए बेहतर उपाय करने की आवश्यकता होगी ताकि आप ग्राफ एल्गोरिदम का उपयोग करने के लिए मजबूर कर सकें जैसे कि आप मन में हैं।
xnor

2
@xnor मुझे लगता है कि मैंने अपना सबक सीख लिया है। वह ठीक है! बॉक्स से बाहर सोच को पुरस्कृत किया जाना चाहिए, दंडित नहीं किया जाना चाहिए।
डॉन थाउजेंड

1
हाँ, मुझे पता है, लेकिन एक 4 रंग सवाल इस तरह से है कि लोगों को न सिर्फ इस सवाल का, परिवर्तन के लिए उनके जवाब ले जा सकते हैं डिजाइन करना होगा 5करने के लिए 4, और उन्हें पुनः सबमिट करें।
पीटर टेलर

जवाबों:


6

पायथन 2 , 96 बाइट्स

i=0
g=input()
while 1:i+=1;c={k:i/4**k%4for k in sum(g,())};all(c[s]^c[t]for s,t in g)>0<exit(c)

इसे ऑनलाइन आज़माएं!

giccc

इनपुट प्लानर है, इसलिए 4-रंग खोजना हमेशा संभव होता है।

(इस प्रकार यह एक अर्थ में lexicographically जल्द से जल्द रंग पाता है, और बहुत ही अक्षमता से करता है।)

kkii4kmod4ki


अच्छा प्रयास है, लेकिन मेरा मानना ​​है कि आप एक घटक को याद कर रहे हैं। उस मामले के बारे में जहां एक नोड 5 अलग-अलग रंगों से घिरा हुआ है?
डॉन थाउजेंड

मैं इसे तोड़ने के लिए एक टेस्ट केस बनाने की कोशिश करूंगा
डॉन थाउजेंड

मान लीजिए कि आपके ग्राफ़ में एक दिया गया नोड 5 अन्य नोड्स से घिरा हुआ है, जिसे आपने पहले ही 5 रंगों में रंग दिया है, जिसकी आपको अनुमति है।
डॉन थाउजेंड

1
मेरा कोड बेतरतीब ढंग से ग्राफ्टिंग कलरिंग उत्पन्न करता है और उन्हें तब तक चेक करता है जब तक कि यह एक सही ग्राफ रंग उत्पन्न कर दे, जो तब बाहर निकलने पर प्रिंट करता है। यदि आप इसका वर्णन करते हैं तो यह शुरू हो जाएगा और उम्मीद है कि उन 5 नोड्स को सभी 5 उपलब्ध रंगों में रंग न दें।
लिन

2
अब यह लेक्सिकोग्राफ़िक क्रम में सभी रंगों की जाँच करता है :) इसलिए यह नियतात्मक और ओ (5 ^ n) है, लेकिन अधिकांश इनपुट के लिए बहुत धीमा है।
लिन

3

जावास्क्रिप्ट (ईएस 7), 80 76 74 बाइट्स

2 बाइट्स @Neil की बदौलत सहेजे गए

लिन के रूप में एक ही दृष्टिकोण । 4 रंगों में हल, 0 से 3 तक गिने ।

a=>{for(x=0;a.some(a=>a.map(n=>z=c[n]=x>>n*2&3)[0]==z,c={});x++);return c}

इसे ऑनलाइन आज़माएं!


यदि आपको 4-रंग की अनुमति है, तो क्यों नहीं x>>n+n&3?
नील

@ नील आह, धन्यवाद। मैं 5-रंग के बारे में स्पष्टीकरण से विचलित हो गया और यह भूल गया कि इनपुट 4 में हल होने की गारंटी है।
अर्नुलद

3

ब्रेकीलॉग , 38 बाइट्स

cd{∧4>ℕ}ᶻ.g;?z{tT&h⊇ĊzZhpT∧Zt≠}ᵐ∧.tᵐ≜∧

इसे ऑनलाइन आज़माएं!

व्याख्या

Example input: [["a","b"],["c","b"]]

cd                                       Concatenate and remove duplicates: ["a","b","c"]
  {∧4>ℕ}ᶻ.                               The output is this list zipped zith integers that
                                           are in [0..4]: [["a",I],["b",J],["c",K]]
         .g;?z                           Zip the output with the input:
                                           [[[["a",I],["b",J],["c",K]],["a","b"]],[["a",I],["b",J],["c",K]],["c","b"]]
              {               }ᵐ∧        Map for each element
               tT                        Call T the couple of nodes denoting an edge
                 &h⊇Ċ                    Take a subset of 2 elements in the head
                     zZ                  Zip and call it Z
                      ZhpT               The nodes in Z are T up to a permutation
                          ∧Zt≠           The integers in Z are all different color
                                 .tᵐ≜∧   Label the integers (i.e. colors) in the output so that
                                           it matches the set constraints

1

पायथन 2 , 211 बाइट्स

def f(g):
 g={k:[(a,b)[a==k]for a,b in g if k in(a,b)]for k in sum(g,())};c={k:0 for k in g}
 for a,b in sorted(g.iteritems(),key=lambda a:len(a[1])):c={k:(c[k],c[k]+1)[c[a]==c[k]and k in b]for k in c}
 return c

इसे ऑनलाइन आज़माएं!

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



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