2008-10-30 7 views
12

मेरे पास एक ऐसा प्रोग्राम है जो आयत को एक साथ फिट करके लिया गया न्यूनतम क्षेत्र की गणना करेगा।आयत को ढेर करने के लिए जितना संभव हो उतना कम स्थान लेना

इनपुट: विभिन्न ऊंचाई और चौड़ाई के आयत।
आउटपुट: एक आयताकार जिसमें इन सभी आयतों को शामिल किया गया है।
नियम: कोई आयत को चालू या रोल नहीं कर सकता है और वे ओवरलैप नहीं कर सकते हैं।

मैं समझता हूं कि यह संबंधित है या संभवतः एक बिन पैकिंग समस्या (एनपी-हार्ड) के रूप में परिभाषित किया गया है। हालांकि उन लोगों के लिए मैंने पाया एल्गोरिदम अक्सर उदाहरण चौड़ाई के लिए एक सीमा निर्धारित करते हैं। मेरे पास ऐसी कोई सीमा नहीं है, एकमात्र लक्ष्य परिणामस्वरूप क्षेत्र को जितना संभव हो सके छोटा करना है।

कोई भी संकेतक क्या एक एल्गोरिदम उचित समाधान प्राप्त करने के लिए उपयुक्त है?

+0

कोई और होमवर्क समस्या गंध करता है? –

+0

नहीं, यह गेम में काफी आम है, इसे बनावट पैकिंग कहा जाता है। –

+0

वास्तव में मैं एक सीएसएस स्प्राइट में आइकन और छवियों का रूपांतरण स्वचालित कर रहा हूं और मैं परिणाम जितना संभव हो उतना अच्छा होना चाहता हूं। –

उत्तर

5

http://www-rcf.usc.edu/~skoenig/icaps/icaps04/icapspapers/ICAPS04KorfR.pdf

जाहिर है इस समस्या को कठिन की तुलना में यह पहली बार में दिखता है। यह एक दिलचस्प एल्गोरिदम है, क्योंकि पहले यह एक समाधान का अनुमान लगाता है और फिर उसमें सुधार करता है, इसलिए यदि आप इष्टतम समाधान की प्रतीक्षा नहीं करना चाहते हैं, तो आप इसे अनुमानित समाधान प्राप्त करने के लिए केवल पुनरावृत्तियों की एक निश्चित संख्या के लिए चला सकते हैं (लंबा आप इसे चलाते हैं, अनुमानित बेहतर)।

+0

लिंक के लिए धन्यवाद। मैंने कुछ समय पहले इसे पढ़ने के लिए अलग करने के लिए बुकमार्क किया था। अब मुझे इसे अंततः पढ़ना है। – Tim

1

मैं http://mathworld.wolfram.com के माध्यम से स्किमिंग से शुरू करूंगा - वे इस तरह की चीजों के लिए बहुत ही अच्छे हैं।

दूसरा, मैं एक डोपी एल्गोरिदम की कल्पना कर सकता हूं जो नीचे के सबसे लंबे (एक्स आयाम में) बॉक्स को रखेगा, फिर सबसे ऊपर (वाई आयाम में) एक तरफ या दूसरी तरफ इसके ऊपर होगा। फिर उन्हें "सीढ़ी से चलने वाले" फैशन में दाएं हाथों और ऊपर की तरफ जाने के लिए जारी रखें (उदाहरण के लिए जब तक आप नहीं कर सकते, तब तक जाएं, फिर ऊपर जाएं, इत्यादि)।

शायद यह गैर-आदर्श है, और आपको बहुत अच्छे परिणाम दे सकते हैं, लेकिन यह पहले दिमाग में आया था।

3

मैं एक साधारण लालची दृष्टिकोण से शुरू करने की सिफारिश करता हूं, और देख रहा हूं कि यह आपकी आवश्यकताओं के लिए पर्याप्त है या नहीं। यदि आपका इनपुट अच्छी तरह से व्यवहार या छोटा है, तो आपको इसकी आवश्यकता हो सकती है - और जब आप कुछ और परिष्कृत करने की कोशिश करते हैं तो जटिलता तेजी से बढ़ जाएगी।

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

एक और लालची दृष्टिकोण एक प्रारंभिक आयत चुनना होगा, फिर बार-बार आयताकार जोड़ना होगा जिसके परिणामस्वरूप सबसे घनी व्यवस्था होती है (जहां घनत्व को भरने वाले बाउंडिंग बॉक्स के प्रतिशत के रूप में परिभाषित किया जाता है)।

+0

मैं उन दोनों को भी सुझाव देने जा रहा था, लेकिन "अच्छा" हेरिस्टिक पर प्रारंभिक धारणा के साथ विभिन्न एनपी समस्याओं पर काम करने के लिए मुझे "बुरा" हेरिस्टिक के साथ प्रयोग करने के लिए प्रेरित किया। परिणाम आश्चर्यचकित थे। स्थानीय न्यूनतम और अधिकतम स्थितियां होती हैं। लेकिन मुझे आपका सुझाव पसंद है। – Tim

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

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