将范围划分为n个部分,使范围内的所有数字都显示在子集

时间:2015-06-10 08:38:01

标签: algorithm

我需要生成N个订户的一些随机数据M小时

让我们说用户ID范围= 1-20

小时数= 20

对于每小时用于数据生成的订户数量:4-6

如何随机选择订阅者ID,以便在20小时内从该范围中挑选所有订阅者,并且还可以在多个小时内重复数据。

例如小时1,订户ID:1-5

小时2,订户ID:4-7(前一小时重复4和5)

小时3,订户ID:6-10(从前一小时开始重复6和7)

在上面的数据中,用户范围按顺序移动,以确保生成所有订户的数据,但我想在保证条件的同时使其随机:

  • 每个订阅者(1-20)在20小时数据中至少出现一次。
  • 订阅者可以在多小时数据中多次出现。

请建议。

2 个答案:

答案 0 :(得分:0)

首先随机设置第一个范围。这将为您提供一系列[x,y] 在接下来的一小时内,添加x[0, y-x]范围内随机选择的数字,新范围的结尾是其开头加上4到6之间的随机数。所有这当然是mod 20(或者无论您的订户ID范围是多少)。

为了确保您到达所有客户端,请将范围设置为最小值,以便您足够快地浏览订阅者列表。

答案 1 :(得分:0)

首先创建1..N范围内数字的随机排列。然后将排列中第i项引用的订户分配给(i%M)小时。这将满足您的第一个要求(每个订户应至少参加1小时)。

现在第二阶段应该迭代几个小时,同时剩下可用的插槽(从每小时4-6个插槽开始)随机化一个1..N范围内的数字并分配相应的用户那个插槽。