संकट
मेरे पास एक अप्रत्यक्ष ग्राफ है (बहु-किनारों के साथ), जो समय के साथ बदल जाएगा, नोड्स और किनारों को डाला और हटाया जा सकता है। ग्राफ के प्रत्येक संशोधन पर, मुझे इस ग्राफ के जुड़े घटकों को अद्यतन करना होगा।
गुण
अतिरिक्त गुण यह है कि किसी भी दो घटकों को कभी भी फिर से जोड़ा नहीं जाएगा। जाहिर है, ग्राफ में एक मनमानी राशि के चक्र हो सकते हैं (अन्यथा समाधान तुच्छ होगा)। यदि एक किनारे वाले में एक नोड n नहीं है , तो वह उस नोड को कभी नहीं अपनाएगा। हालांकि, अगर एन ∈ ई , यह कर सकते हैं करने के लिए बदल n ∉ ई ।
दृष्टिकोण
मेरे पास अब तक दो संभावित दृष्टिकोण हैं, लेकिन जैसा कि आप देखेंगे कि वे भयानक हैं:
धीमा राज्य-कम
मैं हर बार संशोधित तत्व (ओं) से शुरू होने वाले ग्राफ को खोज (dfs / bfs) कर सकता हूं। यह स्थान को संरक्षित करता है, लेकिन प्रत्येक संशोधन के लिए हमारे पास O (n + m) धीमा है।
स्टेटफुल फास्ट (-एआर) (?) दृष्टिकोण
मैं प्रत्येक नोड के लिए सभी संभव रास्तों को सभी संभव नोड्स में संग्रहीत कर सकता हूं, लेकिन अगर मैं इसे सही ढंग से देखता हूं, तो यह O (n ^ 4) मेमोरी लेगा। लेकिन मुझे यकीन नहीं है कि रनटाइम सुधार कैसे होता है (यदि कोई एक है, क्योंकि मुझे एक ही घटक में प्रत्येक नोड के लिए जानकारी को अप-टू-डे रखना है)।
सवाल
क्या आपके पास कोई संकेत है, मैं उस समस्या के बारे में अधिक कैसे सीख सकता हूं या शायद कुछ एल्गोरिदम मैं बना सकता हूं?
ध्यान दें
यदि रनटाइम / मेमोरी में एक बड़ा सुधार है, तो मैं एक गैर-इष्टतम समाधान के साथ रह सकता हूं जो कभी-कभी कहता है कि दो घटक एक हैं, लेकिन निश्चित रूप से मैं एक इष्टतम समाधान पसंद करूंगा।