2012-10-31 13 views
5

मेरे पास Card उदाहरणों की एक सरणी है।इस मानदंड को दिए गए सभी संभावित संयोजनों को कैसे ढूंढें?

Card[] allCards; 

मैं चाहिए निम्नलिखित परिस्थितियों में इन कार्डों की सभी संभव संयोजनों, प्राप्त करने के लिए:

  • संयोजनों की सभी 3 ताश के पत्तों की एक न्यूनतम होनी चाहिए।
  • संयोजन में कोई कार्ड सीमा नहीं है (इसलिए यदि कुल 15 कार्ड हैं, तो आप जानते हैं कि 15 कार्ड का संयोजन हो सकता है, 13, 10, आदि के अन्य)।

कॉलेज के प्रयोजनों के लिए, मुझे इस काम को आसान बनाने में सक्षम किसी फैंसी लाइब्रेरी का उपयोग नहीं करना चाहिए।

मैंने इसे जोड़ों के साथ किया है, यकीन है, लेकिन इस पर विचार करने की कोई सीमा नहीं है, आमतौर पर एल्गोरिदम मैं काम नहीं करता।

यह बहुत ज्यादा है कि वे क्या यहां अजगर के लिए पूछना है: Find all possible combinations

कोई भी विचार? मुझे कोड या कुछ भी नहीं चाहिए - मैं सिर्फ एल्गोरिदम/विचार से खो गया हूं।

मेरे समस्या (अधिक विवरण)

मैं दो छोरों (अन्य के भीतर एक) बनाकर जोड़े बना सकते हैं। मैं तीन लूप (एक दूसरे के भीतर एक दूसरे के भीतर) करके तीन गुना कर सकता हूं।

लेकिन मैं कैसे इस विशिष्ट समस्या का क्या करना नहीं जानता है क्योंकि:

  • क्या होगा यदि सरणी 15 कार्ड है? मैं 15 छोरों ...
  • और फिर निश्चित रूप से मैं 14, 13, 12 छोरों के लिए नीचे जाने के लिए ... (क्योंकि सभी संयोजनों नहीं 15 तत्वों में से प्रत्येक के लिए, वहाँ 14 के संयोजन हो सकता है की जरूरत नहीं लिख सकते हैं , 13, 12 तत्व इस 15-तत्व-सरणी के साथ काम करते समय)

मैं कुछ संयोजन ढूंढ सकता हूं, लेकिन गतिशील रूप से नहीं।

+0

मेरा सुझाव है कि आप दक्षता के बारे में चिंता करने से पहले कुछ ऐसा करने से शुरू करें (कम से कम छोटे इनपुट सरणी के साथ)। यदि आप सभी जोड़ों को उत्पन्न कर सकते हैं, तो क्या आप इसका उपयोग सभी ट्रिपल उत्पन्न करने के लिए कर सकते हैं? –

+0

सुनिश्चित नहीं है कि आप कोड के लिए क्या देख रहे हैं। आपने पहले ही उल्लेख किया है कि आपको क्या चाहिए: "सभी संयोजनों की एक सूची" जो Google और स्टैक ओवरफ़्लो पर कई परिणामों को बदल देती है। क्या कोई विशिष्ट कारण है कि आपकी समस्या का समाधान उन लोगों के द्वारा क्यों नहीं किया जा सकता है? – Grambot

+1

'इन कार्डों के सभी संभावित संयोजनों' का क्या अर्थ है? जैसा कि आप परिणामों को आउटपुट करना चाहिए, या एक गिनती सरल प्रदर्शन करना चाहिए? वहाँ एक बड़ा अंतर है। –

उत्तर

1

कागज और पेंसिल व्यायाम: एक मिनट के लिए जावा वाक्य रचना से

आइए वापस दूर। ऐस को 10 हीरे के माध्यम से कहते हैं, 5 कार्ड्स का एक उदाहरण लें। अब हर संभव जोड़ी को सूचीबद्ध करें। (संकेत: उनमें से 10 हैं)

अब जोड़े की अपनी सूची का उपयोग करके, हर संभव ट्रिपल सूचीबद्ध करें।

अब ट्रिपल की सूची का उपयोग कर, 4.

अब के हर संभव संयोजन सूची का यह कोड है:

जब से तुम संकलन समय पर एक संयोजन की अधिकतम लंबाई पता नहीं है, का उपयोग करते हुए लूप समस्या को हल नहीं करेंगे। दूसरी ओर, यह समस्या खुद को रिकर्सन के लिए उधार देती है। आइए यह मानकर शुरू करें कि हमारे पास Card[][] getCombinations(Card[] cards) फ़ंक्शन है जो कार्ड के सरणी की सरणी देता है।तो अगर हम

Card[] cards = new Card[15]; 
// initialize individual Card objects 
Card[][] combinations = getCombinations(cards); 

combinations[i] में उत्पन्न संयोजनों में से एक है।

अब, चीजों को आसान बनाने के लिए, मान लें कि getCombinations() केवल जोड़े देता है। आप सभी जोड़ों को बनाने के लिए इन जोड़ों का उपयोग कैसे कर सकते हैं?

+0

मैं ... थोड़ा सा खो गया हूं। * getCombinations() * सभी जोड़ों का एक मैट्रिक्स देता है, ठीक है। लेकिन, ठीक है, मैं अभी भी नहीं देखता कि मुझे इसे कैसे नियोजित करना चाहिए :( – Voldemort

+0

@ ओमेगा मेरा संपादित उत्तर देखें। पेंसिल और पेपर के साथ अन्य उदाहरणों को काम करने का प्रयास करें। इससे आपको हल करने के लिए किए गए चरणों की बेहतर समझ मिलनी चाहिए समस्या। –

+0

यह काम कर रहा है। शायद आपके मन में नहीं था (क्योंकि यह नरक एक्सडी के रूप में धीमा है) – Voldemort