gpt4 book ai didi

python - 生成非均匀随机数

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:21:14 24 4
gpt4 key购买 nike

<分区>

Algo(来源:Elements of Programming Interviews,5.16)

You are given n numbers as well as probabilities p0, p1,.., pn-1 which sum up to 1. Given a rand num generator that produces values in [0,1] uniformly, how would you generate one of the n numbers according to their specific probabilities.

例子

If numbers are 3, 5, 7, 11, and the probabilities are 9/18, 6/18,
2/18, 1/18
, then in 1000000 cals to the program, 3 should appear 500000 times, 7 should appear 111111 times, etc.

书上说要创建区间 p0, p0 + p1, p0 + p1 + p2, etc 所以在上面的例子中区间是 [0.0, 5.0), [0.5, 0.0 .8333) 等,并将这些间隔组合成一个排序的端点数组可能看起来像 [1/18, 3/18, 9/18, 18/18]。然后运行随机函数生成器,找到比生成的元素大的最小元素 - 它对应的数组索引映射到给定的 n 数字中的索引。

这需要 O(N) 的预处理时间,然后 O(log N) 对值进行二分查找。

我有一个替代解决方案,需要 O(N) 预处理时间和 O(1) 执行时间,我想知道它可能有什么问题。

为什么我们不能遍历 n 中的每个数字,乘以 [n] * 100 * 与 n 匹配的概率。例如 [3] * (9/18) * 100。连接所有这些数组,最后得到一个包含 100 个元素的列表,每个元素的数量映射到它发生的可能性。然后,运行随机数函数并索引到数组中,并返回值。

这不会比提供的解决方案更有效吗?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com