如何使用自定义概率分布选择随机选择

时间:2013-10-20 23:16:46

标签: python performance probability

我在美国人口普查网站上列出了美国名字及其各自的名字。我想使用给定的概率从此列表中生成一个随机名称。数据位于:US Census data

我已经看到像roulette wheel selection算法这样易于实现的算法,但我想知道是否有任何方法可以在O(1)中生成随机名称。对于histogram data,这更容易,因为您可以创建生日的整数哈希,但我想这样做以便连续分发。

如果这不可能,是否有任何python模块接受概率分布并根据这些分布生成随机值?

2 个答案:

答案 0 :(得分:6)

有一个O(1) - 时间方法请参阅this detailed description of Vose's "alias" method。不幸的是,它的初始化成本很高。有关更简单方法的比较时间,请参阅Eli Bendersky's blog post。可以找到更多时间in this from the Python issue tracker

答案 1 :(得分:4)

如果您确实需要O(1)查找,那么现在可以列举整个美国人口(约3.17亿)。只需选择一个高达3.17亿的数字并从那里获取名称。 (317000000 * 4字节= 1.268GB)

我认为有很多O(log n)方式。是否有特殊原因需要O(1)(他们将使用更少的内存)