Random 根据哈希表中的概率选择项目

Random 根据哈希表中的概率选择项目,random,hashtable,probability,Random,Hashtable,Probability,我想根据给定的概率从哈希表中选取一个项目。 例如,我将字符串“苹果”、“香蕉”和“菠萝”存储到哈希表中。现在,我想根据给定的概率从哈希表中得到一个条目,表示得到“苹果”的概率是30%,得到“香蕉”的概率是30%,得到“菠萝”的概率是40%。有人能帮我吗 我需要使用哈希表的原因是,我实际上在处理大量字符串,这些字符串是某本书中的单词。这个词出现的可能性取决于它在书中的出现。例如,如果某本书中有100000个单词,而单词“dog”出现1000次。当我从我的函数调用时,得到一条“狗”的概率应该是100

我想根据给定的概率从哈希表中选取一个项目。 例如,我将字符串“苹果”、“香蕉”和“菠萝”存储到哈希表中。现在,我想根据给定的概率从哈希表中得到一个条目,表示得到“苹果”的概率是30%,得到“香蕉”的概率是30%,得到“菠萝”的概率是40%。有人能帮我吗


我需要使用哈希表的原因是,我实际上在处理大量字符串,这些字符串是某本书中的单词。这个词出现的可能性取决于它在书中的出现。例如,如果某本书中有100000个单词,而单词“dog”出现1000次。当我从我的函数调用时,得到一条“狗”的概率应该是1000/100000

这是您的项目数组:

[apple, banana, pineapple]
这是您的概率数组:

[0.3, 0.3, 0.4]
[0.3, 0.6, 1.0]
这是您的累积概率数组:

[0.3, 0.3, 0.4]
[0.3, 0.6, 1.0]
要根据概率选择随机项,请选择[0,1]范围内的随机数R,然后选择累积概率大于或等于R的第一个项

例如,如果生成R=0.52839,则选择香蕉,因为0.6是第一个累积概率大于或等于R的项目

您可以对R指定的项进行二进制搜索,因此这是一个log(n)解决方案


我不知道哈希表在这里有什么帮助。简单的数组就足够了。

你应该考虑使用。这是处理大量不等概率的一种非常有效的方法。

嗨,谢谢你的回答。我使用Hashtable的原因是我实际上在处理大量的字符串,这些字符串都是书中的单词。每个单词的概率是根据它的出现来计算的。这就是为什么我想到在这种情况下使用哈希表。你能帮我吗?@JiaxinAmelechYe即使你有很多物品,你还是会想这样做的。@Timothy Shields我想我的问题是当我从书中创建概率数组时,我需要知道每个单词的出现情况。我想用一个哈希表来计算单词的出现次数,当我想根据单词的概率来选择单词时,我不想再次将元素复制到数组中。看来创建数组是唯一的选择?@JiaxinAmelechYe在计数阶段使用哈希表是非常明智的。一旦你计算了书中的所有单词,这样你就有了一个将单词映射到计数的哈希表,然后你可以将它转换成两个数组:项目数组(任意排序)和计数数组(作为double/reals)。然后将这些计数转换为累积计数。然后你恢复正常。谢谢!我认为你的答案基本上和《蒂莫西·希尔兹》一样s@JiaxinAmelechYe不,不是。蒂莫西·希尔德(TimothyShield)的方法仍然是每次搜索备选方案列表,即使是二进制搜索。别名表技术是构造表后每次操作的固定时间。哦!我明白了,让我仔细检查一下