एक निर्देशित ग्राफ में सरल चक्र खोजें


15

यह समस्या, मेरे लिए, बहुत दिलचस्प लग रही है। यह एक निर्देशित चक्र में एक सरल चक्र (यानी चक्र जहां दोहराए गए नोड्स नहीं हैं) को खोजने वाला था।

मेरा समाधान इस तरह से हो रहा है, यानी, यह ग्राफ एक समस्या है: यहाँ छवि विवरण दर्ज करें

मुझे पता है कि एक ग्राफ में एक चक्र होता है, जब आप "बैक किनारों" को गहराई से पहली-खोज में खोज सकते हैं (DFSTree में मेरी तस्वीर में धराशायी), और एक पल के लिए मैं कुछ चक्रों के लिए सुनिश्चित कर सकता हूं, लेकिन इसके लिए नहीं सभी, सरल चक्र। क्योंकि, निर्देशित अहंकार चक्र से इतना महत्वपूर्ण है, अर्थात (0123)! = (0321)

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

यहाँ मेरे मामले की समस्या के लिए सरल छोरों की मेरी गिनती है।

यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करेंयहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें


मैं इस पाया stackoverflow.com/questions/2939877/...
jonaprieto

जवाबों:


13

यह प्रश्न बहुत Googleable प्रतीत होता है। उदाहरण के लिए, आप इस पत्र में प्रस्तुत एल्गोरिथ्म में दिलचस्पी ले सकते हैं:

एक निर्देशित ग्राफ के सभी प्राथमिक सर्किट का पता लगाना । डोनाल्ड बी। जॉनसन। स्याम जे। COMPUT। वॉल्यूम। 4, नंबर 1, मार्च 1975

सार। एक एल्गोरिथ्म प्रस्तुत किया गया है जो समयबद्ध O((n + e)(c + 1))और स्थान से घिरा हुआ है O(n + e), जहां ग्राफ़ में nकोने, eकिनारे और cप्राथमिक सर्किट हैं, द्वारा निर्देशित समय के सभी प्रारंभिक सर्किट-का पता लगाता है । एल्गोरिथ्म टियरनान और टारजन द्वारा एल्गोरिदम जैसा दिखता है, लेकिन तेज है क्योंकि यह किसी भी एक सर्किट और आउटपुट अनुक्रम में अगले के बीच दो बार प्रत्येक किनारे पर विचार करता है।

कागज में एक पूरा एल्गोरिथ्म होता है।


ठीक है। कागज एकदम सही है, लेकिन क्या मैं अपने काम के साथ कहीं भी जा सकता हूं, या सिर्फ कागज देख सकता हूं? मैं तुम्हें खोज रहा था मुझे समाधान के लिए परिचय, मैं अपने विचार के साथ क्या भूल रहा हूँ?
जौनप्रीतो

2
आपकी मुख्य समस्या यह है कि dfs- ट्री अद्वितीय नहीं है (उदाहरण के लिए, अपने आरेख में "3" के साथ "1" स्वैप करें)। आपको सभी चक्रों की गणना करने के लिए सभी संभावित dfs- पेड़ों को देखना होगा।
बैदोत्र

1
मामले में आपको इस एल्गोरिथ्म के जावा कार्यान्वयन की आवश्यकता है: github.com/1123/johnson
user152468

@badroit link टूट गया है ... :(
जॉर्ज ई। हर्नांडेज़

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