0

我只是概括了标题中的问题。

我正在解决的实际问题是这个。我正在制作一个网站,我需要填写网站的“随机文章”部分。这篇随机文章必须显示一整天。因此,我试图提出一种算法,该算法将根据今天的日期从数据库中选择 1 个元素。

我有一个包含大约 100,000 篇文章的数据库。

假设今天的日期是2012-04-28。我也许可以总结数字来选择文章的 ID。在这种情况下,2012+4+28 = 2044。但这是一个问题,2012-04-28并且2013-04-27会显示同一篇文章。

我也不希望算法在附近的两天内两次选择同一篇文章。我希望选择是独一无二的。(理想情况下,我希望它是一个生成函数,涵盖连续 100,000 天的全部 100,000 篇文章。)

我想不出根据日期选择文章的不同方法。有任何想法吗?

4

3 回答 3

0

您可以将日期制作2012-04-28成为20120428

我知道这个数字大于您数据库中的文章数量,但是您可以减去开始显示这些文章的日期,然后显示20120428-20120428=0今天的文章和20120429-20120428=1明天的文章。

于 2012-04-28T14:25:26.783 回答
0

我会以不同的方式处理这个问题。我会为每篇文章分配一个唯一编号,并从 [1..number of article] 范围内选择一个随机数。这使您克服了生成有效随机日期的困难。

分配编号的一种方法是按发布日期对文章进行排序,然后将最旧的文章分配为 1,依此类推。如果这些文章存储在数据库中,那么数据库的主键很可能适合您的需要。

顺便说一句,文章分配编号的方式并不重要。甚至不需要对文章集进行排序即可使该想法起作用(例如,如果它们存储在无序哈希表中)。

在极少数情况下,您可能需要多次调用生成器函数,它会为不再可用的文章返回一个数字(可能是隐藏或删除)。但是,假设不可用文章的数量很少,这种情况不会经常发生,也不会成为性能问题。

于 2012-09-26T22:26:45.790 回答
0

如果您只是计算您的网站上线后的天数,那么您的问题归结为将序列 1、2、3……映射n到一个随机序列。

一个简单的方法是创建一个数组,其中包含从 1 到随机顺序的数字。然后,对于每一天,您都可以使用该元素。n iith

例如,假设n= 4 并且您已经像这样随机填充数组:

a[0] = 3
a[1] = 1
a[2] = 4
a[3] = 2

该数组具有随机序列 3、1、4、2,因此随着时间的推移,您将选择文章 3,然后是文章 1,然后是文章 4,最后是文章 2。

于 2012-04-28T14:41:35.647 回答