总结一个随机抽取算法(全部item出现概率和为100%)

来源:互联网 发布:淘宝商家登陆 编辑:程序博客网 时间:2024/06/10 14:56

//为避免每次重新回忆的麻烦整理一下

设出现概率A:30%,B:15%,C:45%,D:10%

想像在0到100米的长度中,A占从起点开始的前30米,B占后面的15米,C占再后面的45米,D占最后10米。

你随机选择一个0到100米的长度,该长度落在A区间内的概率就为30%,以此类推。

再想像你从起点开始走这个你刚才选择的长度,则你停在某区间的概率同上。

然后就是代码:

//伪代码,没考虑边界和特殊情况的处理,明白意思就行

#define DISTANCE  100

struct Item

 {

char* name;

int chance;

};

Item itemArray = { A, B, C, D};

char* getRandomItem()

{

int chanceSum = 0;

int random = System::Rand() % DISTANCE  ;
Item item;
for ( int i = 0; i < itemArray.size(); ++i)
{
chanceSum += itemArray[i].chance;
if (chanceSum > random )
{
item = itemArray[i];
}
}
return item.name;

}

0 0
原创粉丝点击