生成具有正态分布长度的字符串(Matlab)



我有一个初始字符串:S='ABCDEFGH'如何从S生成100个字符串,其中每个字符串中没有重复的字符,并且每个字符串中的字符将按从"A"到"H"的顺序排列。每个字符串都有不同的长度,这是基于正态分布的。这里,平均值=4,sd=1

预期输出(可能不同,因为随机字符串被生成(应为100 srings,如下所示:

 Output = { 'ABEGH'; 'ABE'; 'DH' ; 'BCGH' ..........; 'ABCDEGH'}

谢谢!

目前还不清楚您想要什么样的分布。这是任何长度分布的通用答案。

S = 'ABCDEFGH'; %// input characters
distr = [.1 .2 .1 .2 .1 .1 .1 .1]; %// probability of getting lengths 1, 2, ..., numel(S)
n = randsample(numel(distr), 1, 1, distr); %// random length with the specified distribution
ind = sort(randperm(numel(S), n)); %// take n sorted values from 1, ..., numel(S);
result = S(ind);

假设从randperm产生的所有排列都同样可能1,则上述代码以给定的n为条件,以相同的概率生成所有可能的n位子串。


1在旧的Matlab版本中,randperm是一个m函数。从它的源代码中可以清楚地看出,它产生了具有相同概率的所有排列。在最近的版本中,它不再是一个m函数,它的文档也没有具体说明这一点

最新更新