matlab - Unique combinations of a beaded necklace -
इस सवाल का पहले से ही एक उत्तर है: < / P>
- 3 जवाब
तो मैं एक लिख रहा हूँ एक मनके हार के अनूठे संयोजनों का निर्धारण करने के लिए कार्यक्रम, लेकिन मुझे यह सही नहीं लगता। नियम हैं कि आप वही हार आगे और पीछे नहीं कर सकते हैं, और आप एक ही हार के साथ दूसरे मोड़ के आसपास एक मढ़ा के साथ नहीं हो सकते हैं। मैंने स्पष्ट करने के लिए कुछ तस्वीरें संलग्न की हैं I
मैंने इसके लिए कोड लिखा था, और मैंने सोचा मैंने जो हासिल करने की कोशिश कर रहा था मैंने उसे प्राप्त किया था, लेकिन यह ठीक से काम नहीं कर रहा है।
n = [1 2 3 4 2 4]; % हरा = 1% नीला = 2% पीला = 3% लाल = 4 पी = पर्म (एन); कुल = अधिकतम (आकार (पी)); मैं = 1 के लिए: अधिकतम (आकार (पी)) q = p; क्यू (आई) = []; जम्मू = 1: अधिकतम (आकार (क्यू)) के लिए यदि असमान (पी (आई), फ्लिपलर (क्यू (जे))) कुल = कुल - 1; एथीफ असिमल (पी (आई), सर्कशीफ्ट (क्यू (जे), [1, 1]) कुल = कुल - 1; एथिफ असेंबल (पी (आई), सर्कशिफ़ट (क्यू (जे), [लंबाई (क्यू (जे)) - 1, लंबाई (क्यू (जे)) - 1])) कुल = कुल - 1; आखिर अंत (कुल) अंत अंत
तार्किक रूप से, यह मुझे समझ में आता है, लेकिन मैं सिर्फ पागल हो सकता है।
आपको कोई भी loops से पहले
p = unique (p, 'rows') करना चाहिए यह देखने के लिए कि, कमांड लाइन पर
perms ([1 1 1]) कॉल करें।
यहां कुछ समस्याएं हैं:
1)
पी , perms, एक 2 डी मैट्रिक्स है, इसलिए प्रत्येक पैरा पाने के लिए आपको
p (i,:) को पंक्ति प्राप्त करने की आवश्यकता है
p (i) सिर्फ एक ही नंबर है।
2) आप अपनी सूची से गलत उत्तर नहीं हटाते हैं, इसलिए आप उनके खिलाफ दो बार जांच लेंगे। उदाहरण के लिए, सूची में पहला कहना है
[1 2 3 4 2 4]; और दूसरा
[4 2 4 3 2 1]; ।
fliplr चेक इन दो संयोजनों की तुलना दो बार, एक बार पहले लूप के आसपास, दूसरे में एक बार होगा।
3) यदि आप यह सुनिश्चित करना चाहते हैं कि किसी भी क्रमबद्धता रोटेशन को बाहर रखा गया है (केवल एक मनका नहीं चल रहा है), आपको कुछ और सर्किट की आवश्यकता होगी।
तुलना करने के लिए
ismember के साथ
पंक्तियों विकल्प का उपयोग करें एक पूरे मैट्रिक्स में एक पंक्ति (जैसे कि आप जिस पंक्ति की जांच कर रहे हैं उसका फ़्लिप संस्करण)।
Comments
Post a Comment