0

我知道这是一个菜鸟问题,但我很坚持,所以我希望你能帮助我。

我有一个整数数组。根据情况,我可以有一个包含 1,2,3 或 1,1,1 或 1,2,2 等的数组。重要的是数组中的值之间的差异可能不大于最小数字 + 2(我可以有 1、2、3 但没有 1、2、4)。现在我抓取数组的最大值和最小值并从最大值递减最小值。因为 max 和 min 之间的差异总是 0、1 或 2(数组值彼此之间不大于两个),所以我有免费的可能机会:

0: - all array values are equal
1: - all array values are from range <x, x + 1>
2: - all array values are from range <x-1, x+1>

现在,如果我想从上面的数组中随机选择值,这很容易。但是我怎么能以比其他人更大的概率选择数字的百分比机会呢?

我是什么意思?考虑第二个示例,以及数组 x-1、x+1 中的值范围 - 让它成为 Array(2, 3, 4)。现在我想有 50% 的机会选择 4、30% 的机会选择 3 和 20% 的机会选择 2。如何将数组中的整数值与选择它的机会联系起来?

我希望你能明白我的意思,你可以帮助我。

编辑:换句话说,如果我有一个充满值的数组,如何轻松地让一系列值成为数组中所有值的一部分,选择一个值的概率比另一个值大?

4

2 回答 2

1

我不确定我是否完全理解第一部分,但假设您希望有 50% 的机会选择 4、30% 的机会选择 3 和 20% 的机会选择 2。

您只需用 5 个 4、3 个 3 和 2 个 2 填充一个长度为 10 的整数数组:

int[] a=[4,4,4,4,4,3,3,3,2,2];

现在以相等的概率随机选择 0 到 9 之间的索引,并返回数组中该索引处的数字。这将返回 50% 的 4、30% 的 3 和 20% 的 2。

于 2013-04-06T19:36:40.927 回答
0
$rand = rand(1, 100);
if ($rand > 50) {
    //select first array
} else {
    //select the second array and so on.
}

上面的代码会有帮助吗?

于 2013-04-06T19:46:50.733 回答