我有80名学生,我需要将他们分成20组,每组4名。 我从先决条件模块中获得了之前的考试成绩,并且我希望确保排序组成员分数的平均值尽可能接近以前考试成绩的总体平均分。
对不起,如果不是特别清楚。
以下是问题的快照:
Student Score
AA 50
AB 45
AC 80
AD 70
AE 45
AF 55
AG 65
AH 90
所以这里得分的平均值是62.5。我如何才能最好地将这8名学生分成两组,每组四组,这两组的综合考试成绩平均值尽可能接近62.5。
我的问题正是如此,但有80个数据点(20组)而不是8个(2组)。
我越想到这个问题就越难看。
有没有人有任何想法?
谢谢
答案 0 :(得分:1)
一种可能的解决方案:
我会尝试使用贪婪的算法,首先将每个学生与另一个让你最接近目标平均水平的学生配对。在初始配对之后,您应该能够使用相同的方法从第一对中进行后续配对。
在第一轮配对之后,这种方法利用两个平均值的平均值并将其与目标平均值进行比较以创建后续组。您可以详细了解解决此问题的原因here.
<强>然而,强>
这不一定会为您提供最佳解决方案,而是一种解决问题的启发式技术。下面的一个着名示例是当一个低值必须被三个高值偏移以达到目标均值时。这种技术不会考虑这些类型的分组。但是,如果你知道你有一个相对正常的分布,以你的目标均值为中心,那么我认为这种方法应该给出一个不错的近似值。
答案 1 :(得分:0)
首先按分数排序。所以它变成了:
AH 90
AC 80
.....
AB 45
AE 45
然后开始将第一个与最后一个结合起来:
(AE, AH, 67.5)
(AB, AC, 62.5)
(AD, AA, 60)
(AG, AF, 60)
在另一种情况下,你将两者结合起来。前两个与后两个。
另一种方式:
1. Find all the possible groups by 4 students.
2. Then for every combination of groups find the abs deviation from the average score and SUM it up for the combination of groups.
3. Choose the combination of groups with the lowest sum.
答案 2 :(得分:0)
最初,我确实考虑过上下匹配选项。 然而,正如约翰强调的那样,结果肯定不是最优的:
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="340px" height="333px" viewBox="0 0 340 333" enable-background="new 0 0 340 333" xml:space="preserve">
<path class="path1" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-miterlimit="10" d="M66.039,133.545c0,0-21-57,18-67s49-4,65,8
s30,41,53,27s66,4,58,32s-5,44,18,57s22,46,0,45s-54-40-68-16s-40,88-83,48s11-61-11-80s-79-7-70-41
C46.039,146.545,53.039,128.545,66.039,133.545z"/>
</svg>