C实现加权随机数(抽取放回或者不放回)

本文介绍了如何在C语言中实现加权随机数的生成。通过创建一个总和为100的数组,根据权重填充数值,然后利用rand()函数选择随机点来获取加权结果。此外,还讨论了抽取放回和不放回两种情况的实现方法,对于不放回的情况,可以通过乱序数组下标实现。
摘要由CSDN通过智能技术生成

        C语言本身是没有内置加权随机数的函数的,但是C本身带有一个随机数生成函数rand();

        实现加权随机数的想法就是,我通过另外生成一个总计100的数组,其中按照概率存放对应的值的数量。通过rand函数进行随机生成若干个0-99的随机数,落点就是我们需要的随机值。可能说得有点绕,直接看代码吧:

        假定需要按照 0.1 0.7 0.2  的权重,随机生成一个 4 7 8中的一个数字(当然,要生成多个数字就是多进行几个循环罢了,比如说假定生成N个加权随机数):

int a[100] = { 0 };
int random[N] = { 0 };
float prob[3] = {0.1,0.7,0.2};

//对a根据概率进行赋值
for (int i = 0;i < (int)prob[0]*100;i++) {
	a[i] = 4;
}
for (int i = (int)(prob[0]*100);i < (int)prob[1]*100;i++) {
	a[i] = 7;
}
for (int i = (int)(prob[1]*100);i < (int)prob[2]*100;i++) {
	a[i] = 8;
}

//随机生成N个0-99内的随机数作为下标,访问a进行赋值
for (int j = 0;j < N;j++) {
	int k = rand();
	random[j] = a[k % 99 + 0];
}

        对rand()函数,在使用前,通过更改随机数种子srand()可以实现生成不同的随机数。由于rand的随机方式是伪随机,所以需

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值