生成随机区间,其中n出现的概率为1 / n

时间:2015-06-02 17:03:34

标签: algorithm probability

假设我们有一个100页的新闻网站,每个网页都有几篇文章,我们想定期解析网站,以统计每篇文章的评论数量。
一篇文章的评论数量将在新文章上迅速改变(在第一页上也是如此),而在非常古老的文章(最后一页)上则非常缓慢。
因此,我希望比最后几页更频繁地解析第一页。

我想象的这个问题的解决方案是每次生成我们想要解析的页面的间隔,并且额外要求此间隔中的n将出现概率1 / n。
例如,我们每次都会解析页面1 第2页将出现在半个时间间隔内 第3页,1/3的时间......

然后我们的算法会在大多数时间生成'interval'[1,1]。区间[1,2]不太可能,[1,3]甚至更少...... [1,100]真的很少见。

您是否看到了使用大多数语言的常规随机函数实现此算法的方法? 有没有其他方法可以解决问题(更频繁地解析网站上的最新内容)更有意义?

感谢您的帮助。

修改
这是基于@ david-eisenstat提供的答案的Python实现 我试图用random()生成整数来实现这个版本,但是我得到了奇怪的结果。

# return a number between 1 and n
def randPage(n):
    while True:
        r = floor(1 / (1 - random()))   
        if r <= n:
            return r

1 个答案:

答案 0 :(得分:0)

如果您的函数random()[0, 1)区间内返回双精度数,那么您会查看1floor(1 / (1 - random()))的网页。当且仅当n的输出位于random()区间[1 - 1/n, 1)时才会检查网页1/n

如果您在random()时间间隔内使用整数[0, RAND_MAX]函数,请让k = random()查看RAND_MAX / kk != 0或全部他们是k == 0