Datetime 给定一个整数数组{1..n}和一个日期,如何根据日期随机选择唯一的元素?

Datetime 给定一个整数数组{1..n}和一个日期,如何根据日期随机选择唯一的元素?,datetime,random,generator,choice,Datetime,Random,Generator,Choice,我只是在标题中概括了这个问题 我要解决的实际问题是这个。我正在制作一个网站,我需要填写网站的“随机文章”部分。这篇随机的文章必须展示一整天。因此,我试图提出一种算法,从数据库中选择一个元素,并根据今天的日期撰写一篇文章 我有一个大约100000篇文章的数据库 假设今天的日期是2012-04-28。我也许可以把这些数字加起来,并附上文章的ID供选择。在这种情况下,2012+4+28=2044。但这是一个问题,2012-04-28和2013-04-27将显示同一篇文章 我也不希望算法在两天内两次选择

我只是在标题中概括了这个问题

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

我有一个大约100000篇文章的数据库

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

我也不希望算法在两天内两次选择同一篇文章。我希望选择是独一无二的。(理想情况下,我希望它是一个生成函数,可以覆盖连续100000天的100000篇文章。)


我想不出有什么不同的方法可以根据日期来选择文章。有什么想法吗?

您可以将日期连接起来,使之成为
20120428


我知道这个数字比你数据库中的文章数量还要多,但是你可以减去你开始显示这些文章的日期,今天显示文章
20120428-20120428=0
,明天显示文章
20120429-20120428=1

如果你只计算网站上线后的天数,那么你的问题就归结为映射序列1、2、3<编码>n到随机序列

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

例如,假设
n
=4,您随机填充数组,如下所示:

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

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

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

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

另外,文章的编号方式并不重要。这组文章甚至不需要排序就可以让这个想法发挥作用(例如,如果它们存储在无序的哈希表中)


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

您需要随机选择一篇文章,还是可以按顺序选择文章?@Adamless best如果是随机选择的,这是一个很好的解决方案。我没想到。但是,它会按顺序选择文章。我宁愿让他们随机选择。@bodacydo这就是为什么要用随机顺序的序列填充数组:这会创建一个随机序列。然后,在遍历数组时,继续前进到序列中的下一个随机数。我会澄清答案。我记得一些关于场论的东西,Z_p等等,整数模素数,一些关于生成器的东西,以及如何将它提升到素数产生Z_p中的所有元素。我想知道我是否可以用这个数论的东西。不过,我自己并不能很好地解决这个问题。我还可以生成一个包含100000个数字的列表,排列该列表,然后将您建议的算法应用于该列表,每天选择一个元素。然而,这需要我以随机顺序在某处存储100000个ID。100000个ID等于400000字节==400KB的数据!没什么,但我还是要把它放在某个地方,要么是一个新表,要么是一个外部文件。我刚刚有了一个非常好的主意——我可以找到一个周期大约为100000的伪随机数生成器(或者我自己试着构造一个),然后总是在使用它之前用
my_seed
,然后给它一天
n
,生成
n
th个随机数。然而,我发现这种方法的一个主要问题是,为了达到第100000个元素,我必须调用我的函数100000次,这是令人不安的。非常好的解决方案,类似于@Adam Liss。然而,正如我在上面的评论中提到的,它会按顺序选择文章。我宁愿让他们随机挑选。你能想出一种方法把这个顺序算法变成随机算法吗?我记得一些关于场论的东西,Z_p等等,模素数的整数,一些关于生成器的东西,以及如何将它提升到素数产生Z_p中的所有元素。我想知道我是否可以用这个数论的东西。不过,我自己想不出来。经审查,这与@Adam Liss的类似,但在将数字映射到文章中时不涉及日期。