我有一个初始字符串:S =' ABCDEFGH' 如何从S生成100个字符串,其中每个字符串中没有重复的字符,并且每个字符串中的字符将按照“A' A”的顺序排列。到了' H' 。每个字符串都有不同的长度,这是基于正态分布。这里,均值= 4,sd = 1
预期的输出(由于随机字符串的生成可能会有所不同,应该是100个如下所示:
Output = { 'ABEGH'; 'ABE'; 'DH' ; 'BCGH' ..........; 'ABCDEGH'}
谢谢!
答案 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函数,它的文档没有指定。