【发布时间】:2011-05-29 12:29:56
【问题描述】:
我有一个包含 100,000 个对象的列表。每个列表元素都有一个与之关联的“权重”,它是一个从 1 到 N 的正整数。
从列表中选择随机元素最有效的方法是什么?我希望我的随机选择元素的分布与列表中的权重分布相同。
例如,如果我有一个列表 L = {1,1,2,5},我希望平均有 5/9 的时间选择第 4 个元素。
假设插入和删除在此列表中很常见,因此任何使用“积分区域表”的方法都需要经常更新 - 希望有一个需要 O(1) 运行时间和 O(1) 额外内存的解决方案。
【问题讨论】:
-
@user470379 这是不同的,因为权重是 1、2、...、N。
-
@user470379,我相信支持插入和删除的要求可以区分它。
-
@marcog 不,它们不是:L = {1,1,2,5},我希望在 5/9 的时间内选择第四个元素。
-
@Alin 我认为你可能是对的。 @John你能确认吗?暂时删除我的答案。
标签: algorithm list random statistics