有一个字符串比如
abcdefghighlmn
另有传数字
10874
如何随机的把数字和字符串整合成一个 要求数字的顺序不能变
也就是可以是
ab1cd0ef8ghi74ghlmn
约定1:从a小球中随机取出b个有C(a,b)种组合。
约定2:字符串长度为str_len,数字长度为digt_len,并将数字随机分为n组,有a(n)=C(str_len+1,n)*C(digt_len,n)组合数
第一步:概率均等下产生n
if(digt_len <= str_len){
所有字符串的组合数总共为:count = a(1) + a(2) +...+a(digt_len);
从count中随机取第r = random(count);
已知r反求n 方法:R(n) = { a(1) n = 1 }
{(R(n-1),R(n-1) + a(n)]; n >1 }
如此随机产生的n,就是概率均等的了。
}else{
这种情况自己特殊处理吧
}
第二步:已知n随机产生字符串C(str_len+1,n) * C(digt_len,n)
1.从1~digt_len-1个数中取出 n-1个数,以此为下标分割成n个数字字符串
2.从0~str_len中随机取出n个空挡,将n个数字字符串塞进去