2012-01-19 11 views
5

यह bin packing problem के समान है, लेकिन कुछ बदलावों के साथ।प्रत्येक आयत और न्यूनतम बिंदु के साथ 2 डी बिन पैकिंग के लिए फास्ट एल्गोरिदम

मेरे पास एनोटेटेड डेटा की टाइम्सरी है, और जब मैं चार्ट खींचता हूं, तो मैं एनोटेशन को उस स्थिति में रखना चाहता हूं जो कुल मिलाकर एनोटेटेड पॉइंट से दूरी को कम करता है।

यह चार्ट, (gratuitously चोरी) दिखाता है कि मैं क्या करना चाहता हूं:

मुझे पता है कि यह एक अनुकूलन समस्या है, लेकिन मुझे नहीं पता कि कहां से शुरू करना है। मैं पहले क्या कर रहा था, इसे संबंधित एक्स पर रख रहा था, और उस स्थान को खोजने के लिए ऊपर/नीचे y स्थानांतरित कर रहा था जो खींचा गया था और उस क्षेत्र को सहेजता है। हालांकि यह काम करता है, यह वास्तव में उपलब्ध स्थान का सबसे अच्छा उपयोग नहीं करता है, और मैं सोच रहा हूं कि कुछ बेहतर है या नहीं।

मुझे आश्चर्य है कि क्या कोई ज्ञात एल्गोरिदम है जो इस या इसी तरह की समस्याओं पर हमला करता है?

जोड़ा गया नोट: इसे इष्टतम होने की आवश्यकता नहीं है, लेकिन इसे बिल्कुल तेज़ होने की आवश्यकता है। यह प्रतिपादन के दौरान किया जाता है, इसलिए यूआई को निष्पादित करते समय अवरुद्ध कर दिया जाता है।

+0

यदि इसे इष्टतम होने की आवश्यकता नहीं है (और आपने जो अनुकूलित किया है उसकी स्पष्ट परिभाषा नहीं दी है), तो गति को बढ़ाने के लिए समाधान किस तरह से उप-इष्टतम हो सकता है? –

+0

मैं एनोटेटेड पॉइंट से दूरी को कम करना चाहता हूं। (प्रत्येक एनोटेशन में एक (एक्स, वाई) होता है जो इसे एनोटेट करता है।) –

+0

यदि आपके द्वारा उल्लिखित एल्गोरिदम (यानी उपलब्ध स्थान ढूंढने के लिए y ऊपर या नीचे) बहुत धीमा है, तो शायद आपके लिए कोई अच्छा समाधान नहीं है ! – ElKamina

उत्तर

4

इस कठिन समस्या के दृष्टिकोण की एक विस्तृत श्रृंखला है। मैं automatic label placement पर विकिपीडिया लेख से शुरू करने का सुझाव दूंगा। आपको force-based algorithms for graph drawing के दायरे से कुछ विचार भी मिल सकते हैं।

+0

बहुत बढ़िया ... यह वह चीज है जिसे मैं ढूंढ रहा था। –

+0

@ReverendGonzo - अच्छी बात विकिपीडिया वापस ऑनलाइन है! :) –

1

मैं इसे ऐसा करूंगा- एक सरल "पहला फिट" एल्गोरिदम का उपयोग करें और लेबल रखने के लिए मनमाने ढंग से आदेश के साथ शुरू करें। प्रत्येक एनोटेटेड पॉइंट से दूरी की दूरी के योग के साथ परिणाम स्कोर करें। मैं दूरी के वर्ग को एक लंबे तरीके से दूर करने के लिए वास्तव में बंद होने से बचने के लिए दूरी से कर दूंगा।

यदि आपका पहला समाधान कुछ सीमा से कम है, तो इसका उपयोग करें और आगे बढ़ें। यदि ऐसा नहीं है, तो सबसे खराब फिट बैठें (यानी लेबल जो एनोटेटेड पॉइंट से सबसे दूर हैं) और उन्हें प्लेसमेंट ऑर्डर में ले जाएं और शुरू करें। इसे तब तक घुमाएं जब तक कि आप या तो कोई समाधान न लें जो पर्याप्त है या आप समय से बाहर हो जाते हैं, इस मामले में आप बहुत से अच्छे समाधान लेते हैं और इसके साथ जाते हैं।

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