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

Algorithm 生成一个随机区间,其中n出现的概率为1/n,algorithm,probability,Algorithm,Probability,假设我们有一个新闻网站,每个网站有100个页面,每个页面显示几篇文章,我们希望定期解析该网站,以统计每篇文章的评论数量。 一篇文章的评论数量在新文章上变化很快(第一页也是如此),在老文章上变化很慢(最后一页)。 因此,我希望比最后一页更频繁地解析第一页 我设想的这个问题的一个解决方案是每次生成我们想要解析的页面的间隔,另外要求在这个间隔中n的出现概率为1/n。 例如,我们每次都会解析第1页。 第2页将在一半的时间间隔内出现。 第三页,时间的三分之一 然后,我们的算法将在大部分时间生成“间隔”[1

假设我们有一个新闻网站,每个网站有100个页面,每个页面显示几篇文章,我们希望定期解析该网站,以统计每篇文章的评论数量。
一篇文章的评论数量在新文章上变化很快(第一页也是如此),在老文章上变化很慢(最后一页)。
因此,我希望比最后一页更频繁地解析第一页

我设想的这个问题的一个解决方案是每次生成我们想要解析的页面的间隔,另外要求在这个间隔中n的出现概率为1/n。
例如,我们每次都会解析第1页。
第2页将在一半的时间间隔内出现。
第三页,时间的三分之一

然后,我们的算法将在大部分时间生成“间隔”[1,1]。间隔[1,2]的可能性更小,[1,3]甚至更小。。。而[1100]将是非常罕见的

您是否看到了一种使用大多数语言的常规随机函数实现该算法的方法?
有没有其他更合理的方法来解决这个问题(更频繁地解析网站上的最新内容)

谢谢你的帮助

编辑:
以下是基于@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和n之间的数字
第页(n):
尽管如此:
r=楼层(1/(1-random())

如果r如果你有一个函数
random()
在区间
[0,1)
中返回double,那么你可以查看pages
1
floor(1/(1-random())
。pages
n
的输出是否在区间
[1-1/n,1)
,其长度为
1/n


如果在区间
[0,RAND\u MAX]
中使用整数
random()
函数,那么让
k=random()
看看
RAND\u MAX/k
页面,如果
k!=0
或者如果
k==0

这就是区间[1,RAND(n)]?[1,RAND(n)]这意味着任何间隔出现1/n时间的概率相等。这里我希望间隔[1,2]比间隔[1100]更可能出现如上面所建议的,改变到几何分布听起来很好:你会看到所谓的概率,你似乎要求和一个数量,很快超过1,实际上是不断增加,没有限制。为了产生任意的粗糙离散分布,你可以考虑。谢谢,这似乎是解决办法。做一些测试,有时算法返回大的数字(例如:1063),如果我想保持在一个范围内(例如:<100),我应该如何处理这些结果不改变概率?我应该放弃它们吗?还是在我的范围内使用一个模?这样做:
如果r>100,那么r=100将明显改变概率。@biwood它不会改变单个页面被访问的概率。不管怎样,它是存在的。