How to find all permutations (with repetition) in MATLAB?

◇◆丶佛笑我妖孽 提交于 2019-11-26 08:30:11

问题


Suppose I have 4 letters and I want to arrange them in 3 places (repetition allowed), so I would have 43=64 possible permutations. How can I compute and print them?


回答1:


Simplifying Amro's answer, you could use this:

%// 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

Matrix y should store the permutations you're after.




回答2:


How about the function N_PERMUTE_K from the File Exchange?




回答3:


An intuitive one-liner:

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

Although nice-looking, it's slow and inefficient. Don't use it for large data sets.




回答4:


Pseudocode solution:

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.

The actual Matlab code is left as an exercise for the student.



来源:https://stackoverflow.com/questions/18591440/how-to-find-all-permutations-with-repetition-in-matlab

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!