【问题标题】:programming algorithm: how evenly distribute categories across columns编程算法:如何在列之间均匀分布类别
【发布时间】:2015-08-15 07:00:59
【问题描述】:

我有许多类别,每个类别都有许多元素。我现在正在寻找一种编程算法来将这些类别分布在预定义数量的列中,而不会破坏类别、保持类别顺序并尽可能保持每列中的元素数量最佳。

例如: 在 3 列中分布 5 个类别

Data:
category A, 7 elements
category B, 7 elements
category C, 3 elements
category D, 2 elements
category E, 8 elements

结果:

Column 1: category A, 7 elements
Column 2: category B and C, 10 elements
Column 3: category D and E, 10 elements

【问题讨论】:

  • 如何定义最优?你的数据有多大(暴力破解是一种选择)?
  • 我认为最优化的定义是每列元素与总元素之间的差异之和除以列数尽可能小。我认为蛮力是一种选择,我预计可能有 100 列和 1000 个元素。

标签: algorithm


【解决方案1】:

您有元素的总数,因此您可以将该数字除以列数,以获得每列中的预期元素数。然后,您的工作是最小化差异的平方和(因此,如果您必须存储 8 个元素并存储 10 个元素,则该列的平方差为 2² = 4)。

然后,您可以编写一个递归函数,针对每个类别,决定是将该类别移动到下一列,还是将其保留在当前列中。这是一个布尔决策,因此您可以从产生最小差异的分支开始,然后从产生最大差异的分支开始。该函数将跟踪迄今为止找到的最佳解决方案,如果当前的平方差之和大于该解决方案的总和,则立即停止。

【讨论】:

  • 方块背后的想法是什么?
  • 在线性差异的情况下,九个完美的列和一列减 10 等于十列减一。平方差会惩罚差异很大的列值,因此错误最终会均匀分布。
  • 让它工作了,但是我用蛮力计算了每个组合的平方和。它现在在 php 上运行,它的光照速度并不快,但如果使用少于 100 个类别就足够了。
猜你喜欢
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2018-05-18
  • 2012-05-04
相关资源
最近更新 更多