0

我需要一种将项目分布在多个数组中的算法。如果这对任何人有帮助,我正在用 PHP 编码。标准是,如果项目数小于数组数,我想均匀地跳过数组。为了帮助您更好地理解我在寻找什么,请查看我的示例问题:

例子:

考虑有 50 个列表。我有 20 个项目要分发到这 50 个列表中。由于只有 20 个项目,一些列表会丢失。什么类型的算法或我可以做些什么来平均分配项目并避免像给前 20 个列表提供项目而后 30 个列表一无所获的事情?

编辑:

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

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

先感谢您。

4

2 回答 2

1

floor(#items/#lists)项目放入每个列表中。

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

于 2013-07-28T04:13:22.977 回答
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 的幂或类似的东西作为起始值。

于 2013-07-28T13:38:53.970 回答