Java 根据分数对学生进行分组

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<

我正在用java开发一个应用程序,根据学生在不同科目中获得的分数,建议可能的学生分组(每组两到三名学生)。在设计自己的算法之前,我想先研究一下类似的算法。 例如,总共有两门课程,每组也有两名学生。算法应将学生分组,使学生a在科目1中表现良好,而学生b在科目b中表现良好

详细解释: 输入将采用以下形式:

student1<90.38<labs
Student1<93.01<exam
Student2<90.38<labs
Student2<85.20<exams
.         .       .
.         .       .         
.         .       .
.         .       .
Studentn<61.48<exams

每行对应一组两名学生。

这很容易。我只告诉你算法

  • 做两个。一个是考试中所有分数的值,另一个是实验室中所有分数的值。使用学生ID作为密钥
  • 现在从每个树映射的第一个索引开始,并选择值

    2.1。如果两个值具有相同的键,则选择下一个,否则选择两个不同的键并从贴图中删除该对

  • 举个例子可能会有所帮助。假设场景如下所示

    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*)
      。请注意减号:这是因为您必须最大化
      社会价值
      ,这是价值总和的最小化

    那么第二部分是你的考试/实验室成绩的总和?第二部分?如果你指的是第二部分的输出,那么它不是根据在实验室和考试中获得的分数将学生分成两组,一个好学生与一个坏学生配对,而这两个分数又被分配了权重。这就是我解决这个问题的办法。展示你的努力会鼓励其他人帮助。这就是我已经尝试过的:根据实验室和考试中获得的分数,将学生分成好学生和坏学生两组,这两种分数依次分配权重。这就是我解决这个问题的办法。我有一个C++实现我的解决方案,但是在我把它加入到我的应用程序之前,我想研究任何替代方案来解决这个问题,因此,通过“显示你的努力”,这个PASS.OK我实际上是代码,但是当我仔细阅读问题时,我想…你到底是什么问题?你必须是通灵的,因为我不知道这个问题是什么actuallyis@boxed__l不,只有两个树梢。一个用于实验室,一个用于考试。但我不明白这是如何产生一组学生,他们在任何基础上互相补充。我的意思是,我能想到的一个可能的标准是,分组的方式是,一组学生在实验室和考试中的累积分数最大化。补语是指实验室分数最高的学生a组和实验室分数最低的学生B组?是的。这是确保每个组具有最大交换标记的一种方法。也许你应该看看我的解决方案的源代码,它可能会给你更多的洞察力。请检查对问题本身的评论。谢谢。这正是我想要的:)
    labMap      examMap
    <K,V>        <K,V>
    
    <1,80>       <3,70>
    <2,50>       <2,70>
    <3,40>       <4,70>
    <4,20>       <1,70>