2013-09-03 6 views
8

मान लीजिए कि मेरे पास 4 अक्षर हैं और मैं उन्हें 3 स्थानों (पुनरावृत्ति की अनुमति) में व्यवस्थित करना चाहता हूं, इसलिए मेरे पास 4 = 64 संभव क्रमिक क्रम होगा। मैं उनकी गणना और प्रिंट कैसे कर सकता हूं?MATLAB में सभी क्रमपरिवर्तन (पुनरावृत्ति के साथ) कैसे खोजें?

+0

चक्र – Gianmarco

+0

के लिए घोंसला 3 [मैटलैब के संभावित डुप्लिकेट - कुछ वैक्टरों के तत्वों के सभी संभावित संयोजन उत्पन्न करें] (http://stackoverflow.com/questions/4165859/matlab-generate-all-possible-combinations-of- कुछ तत्वों के तत्व-तत्व) –

+0

यह वास्तव में कार्टेशियन उत्पाद है और क्रमपरिवर्तन की अवधारणा से काफी अलग है। – knedlsepp

उत्तर

4

फ़ाइल एक्सचेंज से N_PERMUTE_K फ़ंक्शन के बारे में कैसे?

8

Amro's answer को सरल बनाना, तो आप इस इस्तेमाल कर सकते हैं:

%// Sample data 
x = 'ABCD';     %// Set of possible letters 
K = 3;      %// Length of each permutation 

%// Create all possible permutations (with repetition) of letters stored in x 
C = cell(K, 1);    %// Preallocate a cell array 
[C{:}] = ndgrid(x);   %// Create K grids of values 
y = cellfun(@(x){x(:)}, C); %// Convert grids to column vectors 
y = [y{:}];     %// Obtain all permutations 

मैट्रिक्स y क्रमपरिवर्तन आप के बाद कर रहे हैं की दुकान चाहिए।

3

एक सहज एक लाइनर:

unique(nchoosek(repmat('ABCD', 1,4), 3), 'rows') 

हालांकि अच्छा दिखने, यह धीमी और अक्षम है। बड़े डेटा सेट के लिए इसका इस्तेमाल न करें।

1

स्यूडोकोड समाधान:

Generate the (base ten) numbers 0 to 63. 
Change them to base 4, which only has the digits 0, 1, 2, and 3. 
Convert numbers to letters. 

वास्तविक Matlab कोड के छात्र के लिए एक व्यायाम के रूप में छोड़ दिया जाता है।

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