假设我有 4 个字母,我想将它们排列在 3 个位置(允许重复),那么我将有 4 3 =64 个可能的排列。我如何计算和打印它们?
问问题
18869 次
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 回答