8

假设我有 4 个字母,我想将它们排列在 3 个位置(允许重复),那么我将有 4 3 =64 个可能的排列。我如何计算和打印它们?

4

4 回答 4

8

简化Amro 的答案,你可以使用这个:

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

Matrixy应该存储您所追求的排列。

于 2013-09-03T12:36:41.560 回答
4

N_PERMUTE_K文件交换的功能如何?

于 2013-09-03T12:02:50.783 回答
3

直观的单线:

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

虽然好看,但是速度慢而且效率低。不要将它用于大型数据集。

于 2013-09-03T13:02:25.377 回答
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 代码留给学生作为练习。

于 2013-09-03T22:32:41.913 回答