非等概率随机.docVIP

  • 3
  • 0
  • 约 5页
  • 2017-08-09 发布于重庆
  • 举报
非等概率随机.doc

非等概率随机 ??? 对一序列数字随机时一般都是等概率的,但有时候希望某些数字出现的可能性更高一些。下面是本人实现的一个非等概率随机函数,可以对序列中多个数字设置不同的出现频率。限于编码水平,如有需要改进之处敬请指点. /****************************rand_seting.h********************************/ #ifndef RAND_SETING_H #define RAND_SETING_H #include stdlib.h #include time.h /* ?*????随机条件结构: ?*????定义min到max之间个数字出现的频率,默认为1次. ?*????如果希望某些数字出现频率大于1次,则把这些数字存入数字集(由pmore指向), ?*????对应的出现频率存入频率集(由ptms指向),这两个缓冲区由用户定义及设置, ?*????lmore和ltms分别为对应的缓冲区长度,建议两缓冲区长度相等,允许ltms lmore, ?*????但绝不允许ltms lmore,因为这将导致尾部数据读取非频率集缓冲区. ?* ?*????如:对1到20之间的数字随机,希望3出现的频率为5; 7为10; 15为20;其余数字为默认值1 ?*????则结构的设置为: ?*????min = 1; max = 20; ?*????pmore指向的缓冲区为 {3, 7, 15} lmore = 3 ?*????ptms指向的缓冲区为 {5, 10, 20} ltms = 3(建议为此值,但也可以大于3) ?*????当根据这个条件产生随机数时,随机区间为:20+(5-1)+(10-1)+(20-1) = 52 ?*????3被随机到的概率为: 5/52 ?*????7被随机到的概率为: 10/52 ?* 15被随机到的概率为: 20/52 ?* 其它数字的概率则为: 1/52 ?*/ struct rd_dat{ ? ?? long ????min;????// 起始值 ?????long ????max;????// 终止值 ?????long ????*pmore;????// 高频率数字集 ?????long ????lmore;????// 数字集长度 ?????long ????*ptms;????// 高频率数字对应的频率集(出现次数) ?????long ????ltms;????// 频率集长度 }; /* ?*????结构初始化 ?*????返回值:结构指针 ?*/ struct rd_dat *rdinit(struct rd_dat *rt, long min, long max, ????????????????long *pm, long lm, long *pt, long lt) { ????rt-min = min; ????rt-max = max; ????rt-pmore = pm; ????rt-lmore = lm; ????rt-ptms = pt; ????rt-ltms = lt; ????return rt; } /* ?*????获取随机数,存放在bufret数组中,个数为数组长度bufsz ?*????返回值: 出现非法数据返回-1;否则成功返回,值为获取到随机数的个数(bufsz) ?*/ int rdget(const struct rd_dat *rt, long *bufret, long bufsz) { ????long ????rval, exmax = 0; ????long ????i, j, tmp; ????? ????// 验证数据的合法性 ?????if (rt-min rt-max || rt-lmore != rt-ltms || bufsz 1){ ??????????return -1; ?????} ?????if (rt-pmore == NULL || rt-ptms ==NULL || bufret ==NULL){ ??????????return -1; ?????} ?????for (i = 0; i rt-lmore; i++){ ??????????if (rt-pmore[i] rt-min || rt-pmore[i] rt-max){ ???????????????return -1; ??????????} ??????????if (rt-ptms[i] 1){ ???????????return -1; ??????????} ?????} ? ????// 获取扩展最大值 ?????exmax = rt-max

文档评论(0)

1亿VIP精品文档

相关文档