总结一个随机抽取算法(全部item出现概率和为100%)
2014-10-29 17:25
260 查看
//为避免每次重新回忆的麻烦整理一下
设出现概率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;
}
设出现概率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;
}
相关文章推荐
- 统计字符串中出现某子串的次数的一个算法【csdn总结】
- ORACLE随机抽取记录,以及记录出现概率
- 请写一个程序,随机打印“0”、“1”、“2”,但保证“0”、“1”、“2”出现的概率是可配置的,例如2:1:3。
- 一个无聊的小程序,随机尾数出现的概率
- 程序员面试金典——解题总结: 9.18高难度题 18.3编写一个方法,从大小为n的数组中随机选出m个整数。要求每个元素被选中的概率相同。
- C++[算法]给定一个具有100个元素的数组,请对该数组随机赋值1-100,不能出现重复的值
- 程序员面试金典——解题总结: 9.18高难度题 18.2编写一个方法,洗一副牌。要求做到完美洗牌,换言之,这副牌52!种排列组合出现的概率相同
- 给你一个链表和一个 random函数, 设计一个算法能随机返回链表的某个节点, 要求每个节点被返回的概率一样。限制条件是只能遍历链表一次并且不能用额外空间。
- 程序员面试金典——解题总结: 9.18高难度题 18.6设计一个算法,给定10亿数字,找出最小的100万个数字。假定计算机内存足以容纳全部10亿个数字。
- 基础算法测试——生成一个1-10之间的随机整数组合
- 基础算法测试——生成一个1-10之间的随机整数组合
- 用php解决一个数学题【已有很多高手解决,期待更好的算法的出现】
- Google算法更新!搜索结果中将出现一个域名的大量页面
- 找到一个二维矩阵中所有包含0的,并且把0元素所在行与列全部转换成0的算法!
- 找到一个二维矩阵中所有包含0的,并且把0元素所在行与列全部转换成0的算法!
- [每周一算法]统计在一个字符串中各个不同字符出现的次数
- 对开发的一个小网页中出现的几个问题予以总结
- 求一个字符串中出现次数最多的字符的高效算法
- 基础算法测试——生成一个1-10之间的随机整数组合
- C语言的一个简单算法: 26个字母随机步生成