मैं अतिव्यापी छवियों के "सम्मिश्रण" सेट की समस्या को हल कर रहा हूं। इन सेटों को इस तरह अप्रत्यक्ष भारित ग्राफ द्वारा दर्शाया जा सकता है:
प्रत्येक नोड एक छवि का प्रतिनिधित्व करता है। ओवरलैपिंग छवियां एक किनारे से जुड़ी हुई हैं। बढ़त वजन ओवरलैप क्षेत्र के आकार का प्रतिनिधित्व करता है ( जल्द ही बेहतर समग्र गुणवत्ता की ओर जाता है )।
एल्गोरिथ्म आमतौर पर किनारों को हटा देता है। यह इसे क्रमिक रूप से या समानांतर में कर सकते हैं। हालांकि, जब सम्मिश्रण होता है, तो नोड्स विलय हो जाते हैं और ग्राफ संरचना बदल जाती है। इसलिए समांतरीकरण केवल उन जुड़े हुए घटकों पर संभव है जो स्वयं अतिव्याप्त नहीं हैं!
ऐसे गैर-अतिव्यापी घटक डीबी और एफईजी हैं। हम इन घटकों पर सम्मिश्रण एल्गोरिथ्म को समानांतर रूप से सुरक्षित रूप से चला सकते हैं। परिणाम निम्न ग्राफ है (मर्ज किए गए नोड्स हरे रंग में प्रदर्शित होते हैं):
अब आगे कोई समानांतर संभव नहीं है क्योंकि कोई भी दो जुड़े हुए घटक अतिव्यापी हैं (उनके बीच सीधे एक किनारे है)।
एल्गोरिथ्म के समानांतर संस्करण इस तरह दिखेगा:
1. Find connected components (no two are connected directly) and create task for each.
2. Run the tasks in parallel.
3. Update graph.
4. Until single node remains, continue with 1.
मुश्किल हिस्सा पहला कदम है: कैसे जुड़े घटकों का सबसे अच्छा सेट खोजने के लिए?
एक तरह से एक लालची एल्गोरिथ्म होगा जो किसी दिए गए पुनरावृत्ति पर घटकों की सबसे बड़ी संख्या पाता है। लालची एल्गोरिथ्म शुरुआत में समानांतरकरण को अधिकतम करेगा लेकिन बाद में कई पुनरावृत्तियों की कीमत पर।
इष्टतम समाधान एक ही समय में समानांतरकरण को अधिकतम करने और पुनरावृत्तियों की संख्या को कम करने के लिए प्रत्येक पुनरावृत्ति में अच्छी मात्रा में जुड़े घटकों को ला सकता है (इसलिए अनुकूलन में दो चर हैं)।
मैं किसी भी अनुकूलन एल्गोरिथ्म को पीछे करने के अलावा, अर्थात सभी संभावित विकासों के खोज स्थान के बारे में नहीं सोच सकता हूं और अधिकतम समानांतरकरण के साथ एक का चयन कर सकता हूं।
एज वेट को नजरअंदाज किया जा सकता है, लेकिन एल्गोरिथ्म के बेहतर संस्करण को ध्यान में रखा जा सकता है क्योंकि बड़े क्षेत्रों को मिश्रण करने में अधिक समय लगता है (जैसे आकार 200 का क्षेत्र आकार के 100 के दो क्षेत्रों की तुलना में मिश्रण करने के लिए लगभग दोगुना समय लगेगा)। वज़न को ध्यान में रखते हुए घटकों के चयन पर बेहतर रणनीति बनाई जा सकती है (एल्गोरिथम का कुल मिलाकर चलने का समय)।
क्या आपके पास इस तरह के अनुकूलन एल्गोरिदम के लिए कोई सुराग है, जो ग्राफ़ के कुछ हिस्सों को चुनने की सबसे अच्छी रणनीति पाता है ताकि अधिकतम समानांतरकरण और पुनरावृत्तियों की न्यूनतम संख्या हो?