मुझे लगता है कि यह एक आम संयोजन समस्या है, लेकिन मुझे इसके बारे में कोई नाम या इसके बारे में कोई सामग्री नहीं मिल रही है। मैं इसे पायथन और numpy में कर रहा हूँ, लेकिन अगर इसके लिए एक तेज मैट्रिक्स विधि है, तो मैं शायद अनुवाद कर सकते हैं।कुशल आइटम बिनिंग एल्गोरिदम (itertools/numpy)
असल में, n आइटम को देखते हुए, मैं उन्हें मीटर डिब्बे में डाल करने के लिए सभी तरह से उत्पन्न करने के लिए की जरूरत है। उदाहरण के तौर पर, 3 डिब्बे में 4 आइटमों को बांधने से [(4, 0, 0), (3, 1, 0), (3, 0, 1), (2, 2, 0), (2, 1, 1), ...]
कुछ मिलता है। यह एक निश्चित कुल के साथ एक उत्पाद है।
itertools के साथ इसे कार्यान्वित करना सरल है।
import itertools
def fixed_total_product(bins, num_items):
""" Return iterator of all item binning possibilities. """
return itertools.ifilter(lambda combo: sum(combo) == num_items,
itertools.product(xrange(num_items + 1), repeat=bins))
दुर्भाग्य से, मुझे लगता है कि लूप में बाद की गणना करना अक्षम होगा। इसके साथ 2 डी numpy सरणी के रूप में काम करना तेजी से बाद में होगा, लेकिन मैं इसके साथ एक सरणी बनाने के लिए एक कुशल तरीका नहीं समझ सकता। मैं ifilter परिणाम पर पुन: प्रयास कर सकता हूं, संभावनाओं की एक सूची बना सकता हूं, और सरणी बनाने के लिए इसका उपयोग कर सकता हूं, लेकिन यह एक विशाल अपशिष्ट की तरह लगता है।
मुझे लगता है कि ऐसा करने का सबसे अच्छा तरीका यह है कि "सबकुछ रास्ता" बनाना है, लेकिन मुझे यकीन नहीं है कि यह कैसे करें। स्टैक ओवरफ्लो पर एक त्वरित उत्पाद कार्यान्वयन है: Using numpy to build an array of all combinations of two arrays। मुझे लगता है कि आप इसे केवल सही उत्पादों के साथ आउटपुट उत्पादों में संशोधित कर सकते हैं। सरणी का आकार होना चाहिए ((एम -1) + एन) एन चुनें, क्योंकि एम -1 बिन सीमाएं हैं।
कोई विचार? बेंचमार्क बहुत सराहना की, लेकिन आवश्यक नहीं है।
मैंने कहा [पूर्णांक विभाजन समस्या] (http://en.wikipedia.org/wiki/Partition_ (number_theory)) जो एक समान अनुक्रम की लंबाई देता है। मुझे नहीं लगता कि यह बहुत दूर है, क्योंकि एक बार जब आपके पास पूर्णांक विभाजन अनुक्रम होता है तो ऑर्डर को निकालना आसान होता है (सभी क्रमपरिवर्तन जोड़ें) और कई डिब्बे लागू करें ('एन' डिब्बे में' एम 'का अर्थ है कि सबसे बड़ी संख्या कोई भी बिन अधिकतर 'एमएन' पर हो सकता है)। –
ओह क्षमा करें। मैंने सोचा कि मैंने पहले हल/बंद देखा था। हालांकि मुझे समाधान के बारे में असहमत होना है। मैंने एल्गोरिदम को समझने में मदद के लिए एक डॉकस्ट्रिंग और अधिक वर्णनात्मक वर्र्स जोड़े ... –