ग्राफ गहराई-पहली खोज में ग्रे नोड का उद्देश्य


19

गहराई-पहले खोज के कई कार्यान्वयनों में, जो मैंने देखा (उदाहरण के लिए: यहां ), कोड एक ग्रे वर्टेक्स (खोजा गया, लेकिन उसके सभी पड़ोसियों का दौरा नहीं किया गया था) और एक काले रंग के शीर्ष के बीच भेद किया गया (खोज की और उसके सभी पड़ोसियों का दौरा किया गया) । इस भेद का उद्देश्य क्या है? ऐसा लगता है कि डीएफएस एल्गोरिदम कभी भी विज़िट किए गए शीर्ष पर नहीं जाएगा चाहे वह ग्रे या काला हो।

जवाबों:


26

डीएफएस करते समय, कोई भी नोड तीन राज्यों में से एक में होता है - दौरा किए जाने से पहले, अपने वंशजों के पुनरावर्ती दौरे के दौरान, और उसके बाद सभी वंशज का दौरा किया गया है (अपने माता-पिता, यानी रैप-अप चरण पर लौटना)। तीन रंग तीन राज्यों में से प्रत्येक के अनुरूप हैं। रंगों और यात्रा और वापसी के समय का उल्लेख करने का एक कारण स्पष्ट रूप से बेहतर समझ के लिए इन भेदों को बनाना है।

बेशक, इन रंगों के वास्तविक उपयोग हैं। एक निर्देशित ग्राफ पर विचार करें । मान लीजिए आप चक्र के अस्तित्व के लिए जी की जांच करना चाहते हैं । एक अप्रत्यक्ष ग्राफ़ में, यदि विचाराधीन नोड का एक काला या ग्रे पड़ोसी है, तो यह एक चक्र को इंगित करता है (और डीएफएस यह आपके द्वारा वर्णित के रूप में यात्रा नहीं करता है)। हालांकि, एक निर्देशित ग्राफ के मामले में , एक काले पड़ोसी का मतलब चक्र नहीं है। - उदाहरण के लिए, 3 कोने के साथ एक ग्राफ पर विचार एक , बी , और सी , के रूप में निर्देशित किनारों के साथ एक बी , बी सी , एक सी । मान लीजिए कि DFS A से शुरू होता हैजीजी,बी,सीबीबीसीसी, तो दौरा , तो सी । जब यह में वापस आ गया है , तो यह जांचता है कि सी पहले से ही दौरा किया गया है और काला है। लेकिन ग्राफ में कोई चक्र नहीं है।बीसीसी

एक निर्देशित ग्राफ में, एक चक्र मौजूद है अगर और केवल अगर एक नोड को फिर से देखा जाए तो इससे पहले कि उसके सभी वंशज का दौरा किया गया हो। दूसरे शब्दों में, यदि एक नोड के पास एक पड़ोसी है जो ग्रे है, तो एक चक्र है (और नहीं जब पड़ोसी काला है)। एक ग्रे नोड का मतलब है कि हम वर्तमान में इसके वंशज की खोज कर रहे हैं - और अगर इस तरह के वंशज के पास इस ग्रे नोड में बढ़त है, तो एक चक्र है। इसलिए, निर्देशित रेखांकन में चक्र का पता लगाने के लिए, आपके पास 3 रंग होने चाहिए। अन्य उदाहरण भी हो सकते हैं, लेकिन आपको विचार प्राप्त करना चाहिए।


2
+1 अच्छी व्याख्या। एक अप्रत्यक्ष ग्राफ़ (जैसे मेरे प्रश्न निकाय में लिंक किए गए) में सभी नोड के सरल ट्रैवर्सल के लिए, क्या GRAY और BLACK में कोई कार्यात्मक अंतर नहीं है?
15

1
@ user6805 सरल ट्रैवर्सल के लिए - प्रत्येक नोड पर जाना - दोनों निर्देशित या अप्रत्यक्ष ग्राफ के साथ, ग्रे और ब्लैक के बीच कोई कार्यात्मक अंतर नहीं है। आप केवल दो रंगों का उपयोग कर सकते हैं (या दौरा किया / दौरा नहीं किया गया)। यह अधिक जटिल एल्गोरिदम के लिए है जिसे आपको रंगों की आवश्यकता है।
परेश

मैं यह समझ गया! ठीक है, निम्नलिखित मामले पर विचार करें: twitter.com/MaksimADmitriev/status/79699595804327936361 हम DFS का उपयोग करके ग्राफ को पार करते हैं। बाईं ओर का ग्राफ़ इस उत्तर से ग्राफ़ के समान है, और इसमें चक्र नहीं हैं। चलो उस दाईं ओर ग्राफ को पीछे करें जिसमें एक चक्र है। हम ए पर जाते हैं और इसे ग्रे रंग से चिह्नित करते हैं। हम बी पर जाते हैं और इसे ग्रे रंग से चिह्नित करते हैं। हम C पर जाते हैं और इसे ग्रे रंग से चिह्नित करते हैं। अब हम ए की यात्रा के बारे में हैं जो पहले से ही ग्रे है। तो "काले से काले तक" का मतलब यह नहीं है कि एक चक्र है, लेकिन "ग्रे से ग्रे तक" करता है। इसलिए हमें ग्रे की जरूरत है। कृपया मुझे सही करें अगर मैं गलत हूं
दिमित्री

दृढ़ता से जुड़े घटकों को खोजने जैसे और भी जटिल उद्देश्यों के लिए, प्रत्येक को प्रत्येक नोड के लिए दो बार रिकॉर्ड करने की आवश्यकता हो सकती है: पूर्व-समय जब एक नोड पहली बार पाया जाता है (यानी, यह समय ग्रे रंग का होता है) और पोस्ट-टाइम जब एक नोड का दौरा किया जाता है (यानी, यह समय काले रंग का है)। रिकॉर्डिंग को लागू करने के लिए, एक काउंटर बनाए रखा जाता है, जो कि प्रत्येक घटना के घटने के साथ बढ़ता जाता है।
जॉन

2

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

डीएफएस एल्गोरिथ्म में 3 रंगों का उपयोग करने का कारण मुख्य रूप से शैक्षणिक है: यह वैचारिक रूप से स्पष्ट है, यह छात्रों को यह देखने में मदद करता है कि प्रत्येक नोड के लिए निष्पादन के दौरान क्या चल रहा है।


0

ग्रे वर्टेक्स बताता है कि आपने उस नोड का दौरा किया है और किसी क्रम में उसके पड़ोसी में से एक पर चला गया है, लेकिन उस नोड में अधिक पड़ोसी कोने हो सकते हैं। यह तब तक उपयोगी होता है, जब बिना किसी कोने को खंगालने के लिए उपयोगी होता है।

मान लीजिए कि वर्टेक्स ए में दो पड़ोसी बी और सी हैं और बी में एक पड़ोसी डी है

शीर्ष पर शुरू करें A जो कि सफेद रंग का है और इसे अपने पड़ोसी के लिए ग्रे और अनुप्रस्थ बनाता है।

चलो वर्णमाला क्रम को चुनकर कहते हैं कि यह शीर्ष B पर जाता है जो सफेद रंग में है और निशान ग्रे के रूप में।

फिर डी की सफेद यात्रा -> ग्रे डी -> कोई और पड़ोसी नहीं। इसलिए D-> काला निशान ।

अब, backtracks ग्रे में बी करने के लिए और अधिक नहीं nieghbors। इसलिए बी-> काले रंग के निशान ।

अगेन ग्रे में A को पीछे छोड़ता है और c को c-> ग्रे पर जाता है, और कोई पड़ोसी के रूप में C काला नहीं दिखता है

अंत में, A पर वापस जाएँ और A को काले रंग के रूप में चिह्नित करें क्योंकि इसमें अधिक सफ़ेद कोने नहीं हैं और सभी काले हैं।


मैं यह नहीं देखता कि क्या ग्रे और काले के बीच अंतर का कोई उद्देश्य है यहाँ ..
user6805

यही आपको समझना होगा। यदि किसी शीर्ष को काले रंग से चिह्नित किया जाता है, तो इसका मतलब है कि उस शीर्ष पर कोई पड़ोसी लंबवत नहीं होगा। यहाँ वर्टेक्स डी को काले रंग में चिह्नित किया गया है क्योंकि कोई पड़ोसी लंबवत नहीं हैं .. जहाँ ग्रे का सुझाव है कि यात्रा करने के लिए और अधिक पड़ोसी हैं और इसलिए आप उन लोगों से पार पाते हैं।
NRK

मेरा मानना ​​है कि यह आपको बस फिर से जाने वाले नोड्स से बचाता है जिसे आप जानते हैं कि कोई पीछे का किनारा नहीं है (यानी अनुकूलन)
सेडर्टन

0

DFS में हम किनारों को आगे-किनारे, बैक-एज, क्रॉस-एज और ट्री-एज के रूप में वर्गीकृत करते हैं।

हम किनारों को वर्गीकृत करने के लिए 3 रंगों का उपयोग करते हैं। और ये रंग वर्टेक्स की स्थिति का प्रतिनिधित्व करते हैं अर्थात v। सफ़ेद: वर्टेक्स v अभी तक खोजा नहीं गया है।

धूसर: v पहले ही खोजा जा चुका है, लेकिन सभी वर्टिकल जो v से उपलब्ध हैं, अभी तक खोजे नहीं गए हैं। इसलिए वर्टेक्स v अभी भी स्टैक में है।

काला: v पहले से ही स्टैक से बाहर पॉप है। समाप्त और समाप्त हो गया।

डीएफएस करने में अगर आप एज ई के माध्यम से एक ग्रे वर्टेक्स का सामना करते हैं तो यह बैक एज है। यदि आप एज ई के माध्यम से एक काले रंग की चोटी का सामना करते हैं तो यह एक क्रॉस एज / फॉरवर्ड एज है। यदि आप श्वेत शिखर का सामना करते हैं तो आप डीएफएस को पुनरावर्ती कहेंगे।


ठीक है लेकिन क्या बात है? आपने कहा है कि सफेद / ग्रे / काला आगे / पीछे / क्रॉस / पेड़ से संबंधित है, लेकिन आप यह नहीं कहते कि वे चीजें क्या हैं। तो अब सात चीजें हैं जो पूछने वाले को समझ में नहीं आती हैं, केवल तीन के बजाय!
डेविड रिचेर्बी

इन किनारों का उपयोग डीएफएस के विभिन्न अनुप्रयोग में किया जा सकता है, जैसे कि पीछे के किनारों का उपयोग ग्राफ़ में छोरों की पहचान करने में किया जाता है, आगे और क्रॉस किनारों का उपयोग यह जांचने के लिए किया जाता है कि क्या प्रत्येक जोड़ी के बीच अद्वितीय पथ मौजूद है।
नीरज सिंह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.