Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 编程算法:如何在列之间均匀分布类别_Algorithm - Fatal编程技术网

Algorithm 编程算法:如何在列之间均匀分布类别

Algorithm 编程算法:如何在列之间均匀分布类别,algorithm,Algorithm,我有很多类别,每个类别都有很多元素。我现在正在寻找一种编程算法,它可以将这些类别分布在预定义数量的列中,而不必拆分类别,保持类别顺序,并尽可能使每列中的元素数量保持最佳 例如: 在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

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

例如: 在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

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


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

你如何定义最优的?您的数据有多大(暴力是一种选择)?我认为最优化的定义是每列元素与总元素之差除以列数之和尽可能小。我认为暴力是一种选择,我预计可能有100列和1000个元素。正方形背后的想法是什么?有了线性差异,九个完美列和一列减10等于十列减1。平方差会惩罚差异极大的列值,因此误差最终会均匀分布。我成功了,但是我用蛮力计算了每个组合的平方和。它现在在php上运行,虽然速度不快,但如果使用的类别少于100个,它就足够了。