算法 - 在多个数组之间均匀分布项目(如果n项< n数组)

时间:2013-07-27 22:39:49

标签: php arrays algorithm function math

我需要一种能够跨多个阵列分配项目的算法。如果有帮助的话,我用PHP编码。标准是,如果项目数小于数组数,我想均匀地跳过数组。为了帮助您更好地了解我要查找的内容,请查看我的示例问题:

示例:

考虑拥有50个列表。我有20个项目要分发给这50个列表。有些列表会遗漏,因为只有20个项目。什么类型的算法或我可以做什么来均匀分配项目和避免事情就像给出前20个列表项目和最后30个列表什么都没有?

修改

好的,目标是某些列表不要接收项目。 因此,只有20个列表会收到项目。

示例:有8个列表,但只有2个项目。我希望列表3和6接收1个项目,然后该过程将完成。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

在每个列表中添加floor(#items/#lists)个项目。

然后对于剩余的项目,每隔floor(#lists/(#items % #lists))放一个。

答案 1 :(得分:0)

从数组中的一些随机索引开始,然后按数组的长度+ 1模数长度递增:

function distribute_evenly(lists, items)
  last_index = random(length(lists))

  while length(items) > 0 do
    last_index <- mod(last_index + length(lists) + 1, length(lists))
    push(nth(lists, last_index), pop(items))

当然可以有其他技术,以确保函数返回相同的结果,而不是随机的结果。例如,您可以使用最接近列表长度的素数作为起始值,或最接近2的幂或类似值。