我有一个项目列表,我想随机选择其中一个。应该更有可能选择其中一些项目然后列表中的其他项目,因此每个项目都可以设置某种概率。
此外,这些项目中的一些或更好:它们的概率取决于不同的约束条件。例如,如果变量X> 1,则列表项A应该具有更高的概率。 1.如果变量Z为真,则列表项B的概率应为0(即不得选择)。
现在,我假设最简单的方法是定义每个项目的概率并将其存储在ma或两个数组中,或类似的东西。但这真的是最好的方法吗,还有替代方案吗?如何将这些约束与随机选择和概率联系起来?
答案 0 :(得分:0)
答案 1 :(得分:0)
你可以"体重"每个项目和总重量。然后生成1到权重总和之间的随机数。然后找到与该随机数匹配的项目。以下是步骤:
第1步:计算每个点的点数(或重量),然后累计所有点数。
Item RunningTotal
A 5 -- 5 points
B 6 -- 1 point
C 6 -- 0 points
D 8 -- 2 points
-------------------------------------
TOTAL 8 points
第2步:使用您的语言的随机数函数生成1到总点数之间的随机数。类似的东西:
int match = Math.Random(1, 8); -- 8 is the total of the points.
第3步:找到与随机数匹配的项目。
int runningTotal = 0;
int index;
for(index = 1; index < Items.Count(); index++)
{
if(Items[index].Points == 0)
continue;
runningTotal += Items[index].Points;
if(runningTotal >= match)
break;
}
return Items[index]; // the winner