Java 根据分数对学生进行分组
我正在用java开发一个应用程序,根据学生在不同科目中获得的分数,建议可能的学生分组(每组两到三名学生)。在设计自己的算法之前,我想先研究一下类似的算法。 例如,总共有两门课程,每组也有两名学生。算法应将学生分组,使学生a在科目1中表现良好,而学生b在科目b中表现良好 详细解释: 输入将采用以下形式:Java 根据分数对学生进行分组,java,algorithm,Java,Algorithm,我正在用java开发一个应用程序,根据学生在不同科目中获得的分数,建议可能的学生分组(每组两到三名学生)。在设计自己的算法之前,我想先研究一下类似的算法。 例如,总共有两门课程,每组也有两名学生。算法应将学生分组,使学生a在科目1中表现良好,而学生b在科目b中表现良好 详细解释: 输入将采用以下形式: student1<90.38<labs Student1<93.01<exam Student2<90.38<labs Student2<85.20<
student1<90.38<labs
Student1<93.01<exam
Student2<90.38<labs
Student2<85.20<exams
. . .
. . .
. . .
. . .
Studentn<61.48<exams
每行对应一组两名学生。这很容易。我只告诉你算法
Student ID lab exam
1 80 10
2 50 50
3 40 70
4 20 40
所以在创建树状图之后
labMap examMap
<K,V> <K,V>
<1,80> <3,70>
<2,50> <2,70>
<3,40> <4,70>
<4,20> <1,70>
LabMapExamMap
你可以看到,我们先取1和3
然后,由于2和2是相同的,我们将选择2和4
在3和2之后
至少4和1。我尝试向您推荐一种帕累托最优算法:
- 建一棵树
- 第一个节点是关于选择组的数量:例如,如果您有10个学生,您可以拥有从4:{3,3,2,2}到5:{2,2,2,2}的多个组。这样,在这个简单的示例中,第一个节点只有两个子节点,一个有4个组,一个有5个组
- 开始用较少的组扩展节点,并生成所有可能的组合(无重复)
- 例如,生成组合{3,3,2,2}。从这里按顺序分配一个学生并生成另一个节点:从学生s1{{s1,,},{,,},{,},{,},{,}开始,然后添加s2:{{{s1,s2,},{,,},{,},{,},}等。每次到达最后一个节点时,计算解的值。价值的一个例子可以是各组之间的平均差异之和,根据受试者和成分进行区分(或者,如果您愿意,您可以在实验室和考试中进行加权求和)。例如,对于两个主题和每个主题两个组件,您将有4个不可比较的值。解决方案类似于{D1,D2,D3,D4},其中值Dn是值n上各组之间的平均距离
- 如果某个解决方案是或是唯一可用的解决方案,则将其添加到可行解决方案集中。每次你得到一个解决方案,你必须将它的最优性与解决方案集中的所有解决方案进行比较。如果集合的某个解被该解支配,则必须将其从集合中移除
- 最后,您将有一组帕累托有效的解决方案可供选择。选择可以通过应用一些来完成,在这种情况下,我将使用社会效率,这意味着从帕累托前沿选择解决方案,使所有值的差异之和最小化。这意味着
。请注意减号:这是因为您必须最大化SocialValue=-(*D1*+*D2*+*D3*+*D4*)
,这是价值总和的最小化社会价值
labMap examMap
<K,V> <K,V>
<1,80> <3,70>
<2,50> <2,70>
<3,40> <4,70>
<4,20> <1,70>