2012-08-26 16 views
5

मेरे पास एक अप्रत्यक्ष ग्राफ है। उस ग्राफ में एक किनारा विशेष है। मैं उन सभी अन्य किनारों को ढूंढना चाहता हूं जो पहले किनारे वाले एक चक्र के हिस्से हैं।ग्राफ़ एल्गोरिदम भी चक्रों का पता लगाने के लिए

मुझे सभी चक्रों की गणना करने की आवश्यकता नहीं है, जो मूल रूप से एनपी मुझे लगता है। मुझे बस प्रत्येक किनारे के लिए, यह उपरोक्त स्थितियों को पूरा करता है, यह जानने की जरूरत है।

एक ब्रूट फोर्स सर्च कोर्स का काम करता है लेकिन बहुत धीमा है, और मैं कुछ भी बेहतर तरीके से आने के लिए संघर्ष कर रहा हूं। किसी भी मदद की सराहना की।

+0

आपकी इच्छित गुणवत्ता का उत्तर प्रदान करने के लिए यहां अपर्याप्त जानकारी है। आप कितने समय से जानते हैं कि किन किनारा विशेष है? क्या आपको डेटा को प्रीप्रोसेस करने की अनुमति है? आप डेटा को पहले से कितना स्पर्श करते हैं (जैसे इसे लोड करें), और क्या आप संशोधित कर सकते हैं कि आप डेटा को प्रीप्रोसेस कैसे करते हैं? – ninjagecko

+0

इसके अलावा, आपको संभवतः सभी चक्रों को देखने की आवश्यकता हो सकती है ** यदि ** आप प्रीप्रोकैसिंग का दुरुपयोग नहीं कर सकते हैं, हालांकि मैं उस दावे के सबूत को किसी अन्य तरीके से नहीं सोच सकता। – ninjagecko

+1

@ninjagecko ग्राफ एक रासायनिक संरचना का प्रतिनिधित्व करता है, यानी शिखर परमाणु होते हैं और किनारों परमाणुओं के बीच रासायनिक बंधन होते हैं। उपयोगकर्ता द्वारा रासायनिक संरचना को लगातार संपादित किया जा रहा है और यह एल्गोरिदम वास्तविक समय में चलने की उम्मीद है क्योंकि उपयोगकर्ता संपादन करता है। हम ग्राफ के लिए एक सरल आसन्न सूची संरचना का उपयोग करते हैं, हालांकि हम कुछ अन्य संरचनाओं को भी बनाए रखते हैं (उदाहरण के लिए हम जानते हैं कि किनारे एक चक्र का हिस्सा है या नहीं)। यदि मैं आपको सही समझता हूं, तो प्रीप्रोकैसिंग एक विकल्प नहीं है, क्योंकि ग्राफ (और विशेष किनारे) हमेशा बदल रहे हैं। – john

उत्तर

1

मुझे लगता है कि हमारे पास एक जवाब है (मुझे अपने सहकर्मी को इस विचार के साथ क्रेडिट करना होगा)। अनिवार्य रूप से उनका विचार बाढ़ भरने वाले एल्गोरिदम को चक्रों की जगह के माध्यम से करना है। यह काम करता है क्योंकि यदि आपके पास दो छोटे चक्रों को विलय करके गठित एक बड़ा चक्र भी है तो छोटे चक्र दोनों या दोनों विषम दोनों होना चाहिए। इसी तरह एक विषम और यहां तक ​​कि चक्र विलय करना हमेशा एक बड़ा विषम चक्र बनाता है।

यह केवल एक व्यावहारिक विकल्प है क्योंकि मैं पैथोलॉजिकल मामलों की कल्पना कर सकता हूं जिसमें वैकल्पिक और अजीब चक्र भी शामिल हैं। इस मामले में हम कभी भी दो आसन्न चक्र कभी नहीं पाएंगे और इसलिए एल्गोरिदम धीमा हो जाएगा। लेकिन मुझे पूरा भरोसा है कि ऐसे मामले असली रसायन शास्त्र में नहीं उभरते हैं। कम से कम रसायन शास्त्र में, जैसा कि वर्तमान में जाना जाता है, 30 साल पहले हमने कभी फुलरेंस के बारे में नहीं सुना होगा।

-1

अपने ग्राफ एक छोटा सा नोड डिग्री है, तो आप एक अलग ग्राफ प्रतिनिधित्व विचार कर सकते हैं:

तीन परमाणुओं u,v,w और दो रासायनिक बंधन e=(u,v) और k=(v,w) करते हैं। ऐसे डेटा का प्रतिनिधित्व करने का एक सामान्य तरीका u,v,w को नोड्स और e,k को ग्राफ़ में किनारों के रूप में स्टोर करना है।

हालांकि, एक ग्राफ में नोड्स के रूप में e और k प्रतिनिधित्व कर सकते हैं, f=(e,k) की तरह किनारों होने जहां fw, f=(e,k) या f=(u,v,w) करने के लिए u से 2 कदम लिंक प्रतिनिधित्व करता है। इस तरह के ग्राफ पर चक्र खोजने के लिए किसी भी एल्गोरिदम को चलाने से मूल ग्राफ पर सभी चक्र भी वापस आ जाएंगे।

बेशक, यह केवल तभी प्रभावी है जब मूल ग्राफ में एक छोटी नोड डिग्री हो। जब कोई उपयोगकर्ता एक संपादन करता है, तो आप आसानी से वैकल्पिक प्रतिनिधित्व के अनुसार संपादित कर सकते हैं।

संबंधित मुद्दे