根据哈希表中的概率提取项目

时间:2013-11-05 17:51:10

标签: random hashtable probability

我想从哈希表中根据给定的概率选择一个项目。 例如,我将字符串“apple”“banana”和“pineapple”存储到我的哈希表中。现在我想根据他们给出的概率从哈希表中得到一个项目,说得到“苹果”的概率是30%,“香蕉”是30%,“菠萝”是40%。有人可以帮我这个吗?

我需要使用Hashtable的原因是我实际上处理了大量字符串,这些字符串是某本书中的单词。这个词的概率取决于它在书中的出现。例如,如果某本书中有100,000个单词,则“dog”一词会出现1,000次。当我从我的函数调用时,我获得“狗”的概率应该是1,000 / 100,000。

2 个答案:

答案 0 :(得分:2)

这是你的项目数组:

[apple, banana, pineapple]

这是你的概率数组:

[0.3, 0.3, 0.4]

这是累积概率的数组:

[0.3, 0.6, 1.0]

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

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

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

我不知道哈希表能在何处帮助你。简单的数组就足够了。

答案 1 :(得分:1)

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