我在美国人口普查网站上列出了美国名字及其各自的名字。我想使用给定的概率从此列表中生成一个随机名称。数据位于:US Census data
我已经看到像roulette wheel selection算法这样易于实现的算法,但我想知道是否有任何方法可以在O(1)中生成随机名称。对于histogram data,这更容易,因为您可以创建生日的整数哈希,但我想这样做以便连续分发。
如果这不可能,是否有任何python模块接受概率分布并根据这些分布生成随机值?
答案 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)
(他们将使用更少的内存)