देख रहे हैं मैं इस लोगों के लिए एक एल्गोरिथ्म बनाया, यह वास्तव में NP-HardBin packing समस्या का एक प्रकार है, लेकिन एक अनंत बिन आकार के साथ।
आप इसके बारे में कुछ लेख ढूंढने का प्रयास कर सकते हैं और अपने एल्गोरिदम को अनुकूलित करने का प्रयास कर सकते हैं, लेकिन अंत में यह हर संभावना का प्रयास करने के लिए एक क्रूर बल तरीका रहेगा और परिणामस्वरूप बिन आकार को कम करने का प्रयास करेगा।
यदि आपको सबसे अच्छा समाधान की आवश्यकता नहीं है, लेकिन केवल एक समाधान है, तो आप सभी संयोजनों को मजबूर करने से बच सकते हैं। मैंने एक कार्यक्रम बनाया जिसने एक बार भी किया।
विवरण:
Images: array of the input images
ResultMap: 2d array of Booleans
FinalImage: large image
- क्रमबद्ध छवियाँ सरणी ताकि सबसे बड़ा छवि शीर्ष पर है।
- अपनी छवियों के कुल आकार की गणना करें और ResultMap को प्रारंभ करें ताकि यह आकार आपकी छवियों के कुल आकार 1.5 गुणा हो (आप बेहतर स्मृति उपयोग और प्रदर्शन के लिए यह कदम बेहतर बना सकते हैं)। परिणाम को एक ही आकार में बनाएं और इसे गलत मानों से भरें।
- फिर अपने अंतिम छवि के बाईं ओर पहली छवि जोड़ें और सभी बूलेन्स को ResultMap में 0,0 से ImageHeight, ImageWidth तक सेट करें।
परिणाम का उपयोग तुरंत जांचने के लिए किया जाता है कि क्या आप वर्तमान अंतिम छवि पर एक छवि फिट कर सकते हैं। आप इसे int32 का उपयोग करने के लिए अनुकूलित कर सकते हैं और प्रत्येक पिक्सेल के लिए प्रत्येक बिट का उपयोग कर सकते हैं। यह स्मृति को कम करेगा और प्रदर्शन में वृद्धि करेगा, क्योंकि आप एक बार में 32 बिट की जांच कर सकते हैं (मास्क का उपयोग करके)। लेकिन यह अधिक भिन्न हो जाएगा क्योंकि आपको उस मुखौटा के बारे में सोचना होगा जिसे आपको अपनी छवि के किनारों के लिए बनाना होगा।
अब मैं "एल्गोरिदम" के वास्तविक पाश का वर्णन करूंगा।
- सरणी में प्रत्येक छवि के लिए एक जगह खोजने का प्रयास करें, यह फिट होगा। आप एक लूप लिख सकते हैं जो ResultMap सरणी को देखेगा और झूठी मान की तलाश करेगा और यह देखने के लिए शुरू होगा कि यह छवि के आकार के लिए दोनों दिशाओं में गलत है या नहीं।
- आप एक जगह मिल जाए, ResultMap
- में FinalImage करने के लिए छवि को कॉपी करें और सही बूलियन्स अद्यतन यदि आप एक जगह मिल cand हैं, तो बस इतना FinalImage का आकार बढ़ाने के (ताकि किनारों पर नज़र डालें तो जहां अतिरिक्त स्थान की न्यूनतम राशि की जरूरत है) और यह भी सिंक कि ResultMap साथ
- गोटो 1 :)
यह इष्टतम नहीं है, लेकिन यह एक यथोचित इष्टतम तरीका (खासकर अगर में समस्या का समाधान कर सकते हैं वहाँ कुछ छोटी छवियां हैं अंत में गैब भरें)।
स्रोत
2008-09-24 08:04:11
हे लिनर! तो आखिर में तुमने क्या किया? इससे मदद मिलेगी ... – Lazer