2012-03-25 11 views
52

कम से कम मैं निम्नलिखित समस्या को हल करने के लिए एक बेहतर एल्गोरिथ्म खोजने के लिए करना चाहते हैं:को न काटने रेखा खंड जबकि संचयी लंबाई

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

सी ++ में मेरा पहला प्रयास सभी संभावित राज्यों को अनुमति दे रहा था, छेड़छाड़ मुक्त राज्य ढूंढ सकता था, और उन राज्यों में न्यूनतम कुल सेगमेंट लंबाई ओ (एन!) था। लेकिन मुझे लगता है कि एक बेहतर तरीका होना चाहिए।

enter image description here

किसी भी विचार? या खोज के लिए अच्छे कीवर्ड?

+0

शायद कुछ प्रकार के स्थलीय प्रकार? –

+0

मुझे जवाब भी नहीं पता है, लेकिन मैं कोई समाधान (संघर्षों को अनदेखा कर दूंगा) और फिर अलग-अलग संघर्ष को हल करूंगा: जब दो पंक्तियां संघर्ष करती हैं, ऐसा लगता है कि अंत बिंदुओं की एक जोड़ी को स्विच करना संघर्ष को हल करता है। मुझे यकीन नहीं है कि प्रगति की गारंटी कैसे दी जाए, हालांकि। –

+1

@ डाइटमारकुहल: एंडपॉइंट्स को स्विच करने से एक अलग संघर्ष दिखाई दे सकता है। –

उत्तर

38

यह Minimum Euclidean Matching in 2D है। इस लिंक के बारे में क्या पता है इस लिंक में एक ग्रंथसूची है। यह देखते हुए कि आप कुल लंबाई को कम करना चाहते हैं, गैर-चौराहे की बाधा अनावश्यक है, क्योंकि किसी भी जोड़ी को पार करने वाले खंडों की लंबाई उन्हें कम करके कम किया जा सकता है।

+0

@ वाल्केर्नियो, यह आपके पैरों को पार नहीं कर रहा है, क्योंकि आपके पैरों के बीच की दूरी, और आपके कूल्हों के बीच की दूरी आपके पैरों की लंबाई से कम है। – zzzzBov

+1

@ qq3: कड़ाई से बोलते हुए, मुझे लगता है कि यह * द्विपक्षीय * न्यूनतम यूक्लिडियन मिलान है, जो आपके लिंक में उल्लिखित एक सबसेट है। – RBarryYoung

+0

@dmckee: qq3 ने कहा कि गैर-अंतरण नियम न्यूनतम कुल लंबाई बाधा के तहत * अनावश्यक * था, इसके साथ "संघर्ष में" नहीं (गणितीय रूप से, ये * बहुत * अलग-अलग चीजें हैं)। और * द्विपक्षीय * समस्याओं के लिए (जो यह है) स्थानीय रूप से अलग करने योग्य सुधार हमेशा वैश्विक स्तर पर वैध सुधार भी होते हैं, इसलिए स्थानीय लंबाई-पार करने का नियम विश्व स्तर पर भी लागू होता है। (मुझे यकीन नहीं है कि यह गैर-द्विपक्षीय मामलों पर लागू होता है, हालांकि, बिपार्टाइट बहुत आसान है)। – RBarryYoung

1

ऐसा लगता है कि आप BSP-type एल्गोरिदम का उपयोग कर सकते हैं।

2

आप यादृच्छिक कनेक्शन का चयन कर सकते हैं, फिर प्रत्येक बार एक क्रॉस को हटाएं (वास्तव में उनके अंत बिंदुओं के कनेक्शन को बदलें), यह एल्गोरिदम काम करता है और सीमित चरणों में समाप्त होता है। हो सकता है कि आप स्विचिंग क्रॉस को नए क्रॉस के कारण बनते हैं, कोई फर्क नहीं पड़ता, हर बार एक क्रॉस स्विच करके, आप अपने उत्तर की कुल लंबाई को कम करने जा रहे हैं और इस तरह अनंत नहीं हो सकते हैं (क्योंकि लाइनों की कुल लंबाई सीमित है)। वास्तव में ओ (एफ * एन^2) में काम करता है जहां F= sum of all line segments * power of 10 (इसे पूर्णांक बनाने के लिए)। यह ओ बहुत आशावादी है, मुझे लगता है कि यदि आप इस सरल एल्गोरिदम को आजमाते हैं तो यह ठीक काम करेगा। निश्चित रूप से यह सामान्य रूप से ब्रूट फोर्स से बहुत बेहतर है।

+0

@ मसूदएम। मुझे 100% यकीन है कि स्विचिंग अंततः बंद हो जाएगा (कुल लंबाई घट जाती है)। यदि आप उस समय की परवाह करते हैं (आपको यह कितनी बार करना चाहिए), क्योंकि आपका प्रोग्राम परिमित मशीनों (पीसी) पर चलता है, उनके पास ईपीएसलॉन (जो बहुत छोटा हो सकता है) की तरह कुछ नहीं है, उनकी सटीकता पूर्वनिर्धारित है (उदाहरण के लिए 30 बिट), इसलिए इसे जल्द ही पूरा किया जा सकता है, इसके अलावा आप परिवर्तनों में बेहतर चयन करने के लिए प्रत्येक चरण में कुछ ह्युरिस्टिक्स जोड़ सकते हैं। मेरा सुझाव है कि आप इसे कार्यान्वित करें (आपको अन्य सभी एल्गोरिदम में कुछ आधारों की आवश्यकता है जैसे छेड़छाड़ ढूंढना और उनमें से कुछ बदलना सभी एल्गोरिदम में आवश्यक है)। –

+0

कुल लंबाई घट जाती है लेकिन इसकी सीमित है क्योंकि यह कम से कम शून्य होगी। –

+0

@ मसूदएम। एक उपयोगी ह्युरिस्टिक प्रत्येक चरण में सभी संघर्षों को ढूंढता है और उन्हें हल करता है, फिर फिर संघर्षों की खोज करता है, भले ही आप qq3 के सुझाए गए कागजात पढ़ते हैं, बेशक आप इससे बेहतर जवाब प्राप्त करेंगे। –

1

उपयोग क्रम O (n) के साथ इस एल्गोरिथ्म:

Hungarian algorithm एक मिश्रित अनुकूलन एल्गोरिथ्म कि बहुपद समय में काम समस्या का हल है।

यह कैसे मदद कर सकता है? खैर, यह केवल न्यूनतम संचयी लंबाई मिलेगा। लेकिन ...

जब कुल लंबाई न्यूनतम है, तो कोई अंतःक्रिया नहीं है।

तो, के रूप में @ QQ3 कहा चौराहे बाधा अनावश्यक है और इस बाधा को दूर करने के बाद, यह हे से आदेश(एन) को हे कम कर सकते हैं (एन!)।

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