gpt4 book ai didi

matlab - 生成具有受控输出的集合的排列?

转载 作者:行者123 更新时间:2023-12-01 15:21:25 25 4
gpt4 key购买 nike

是否有一种简单的方法来获取集合的前 x 个排列?

例如一个包含 5 个字符的集合 {a,b,c,d,e} 将有

5*5*5*5*5=3125个排列输出

(允许重复,例如 {a,a,a,a,a})

但我只想获得例如前 100 个值

最佳答案

一种按字典顺序一次生成所有“排列”的方法,而不必将它们全部存储在内存中:

function permute_chars(alphabet, nword, nmax)

if nargin < 3 % default to displaying all, this can be a huge number!
nmax = nchar^nword;
end

nchar = length(alphabet);
ind = zeros(1, nword);
i = 0;

while i < nmax
% just printing the permutaions, edit according to your needs
disp(cell2mat(alphabet(ind + 1)));

% calculate next indices, classic elementary school addition with carry
ind(end) = ind(end) + 1;
for j = nword:-1:2
if ind(j) == nchar
ind(j) = 0; % wrap around
ind(j-1) = ind(j-1) + 1; % carry
end
end
i = i + 1;
end

当然,我忘记了一些晦涩的函数,这些函数可以用更少的行来实现它,但是这样写很清楚它是如何工作的。快速测试:

>> alphabet = {'a', 'b', 'c', 'd', 'e'};
>> permute_chars(alphabet, 1)
a
b
c
d
e
>> permute_chars(alphabet, 2)
aa
ab
ac
ad
ae
ba
[... snip ...]
ed
ee

仅打印有限数量的排列:

>> permute_chars(alphabet, 5, 8)
aaaaa
aaaab
aaaac
aaaad
aaaae
aaaba
aaabb
aaabc

关于matlab - 生成具有受控输出的集合的排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29990842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com