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

时间:2015-07-06 16:16:06

标签: string matlab normal-distribution

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

预期的输出(由于随机字符串的生成可能会有所不同,应该是100个如下所示:

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

谢谢!

1 个答案:

答案 0 :(得分:2)

不清楚您想要的分发。这是任何长度分布的通用答案。

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函数,它的文档没有指定。