我想从哈希表中根据给定的概率选择一个项目。 例如,我将字符串“apple”“banana”和“pineapple”存储到我的哈希表中。现在我想根据他们给出的概率从哈希表中得到一个项目,说得到“苹果”的概率是30%,“香蕉”是30%,“菠萝”是40%。有人可以帮我这个吗?
我需要使用Hashtable的原因是我实际上处理了大量字符串,这些字符串是某本书中的单词。这个词的概率取决于它在书中的出现。例如,如果某本书中有100,000个单词,则“dog”一词会出现1,000次。当我从我的函数调用时,我获得“狗”的概率应该是1,000 / 100,000。
答案 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。这是处理大量不等概率的一种非常有效的方法。