结对第二次作业
成员
- 媛 528
- 佳莹 516
github
设计说明
内部实现设计
类图
匹配算法
1.思路分析 我们将社团录取社员的影响因素列举出来,分别是:绩点、志愿数(填报志愿越多得分越低)、Tag匹配度、时间匹配度共四个影响因素。 因为四个因素的对于录取的影响强度不同,我们准备为个因素分配不同的权重值用来计算学生的最后得分。参考了,我们最终选定第三种对偶比较法来分配权重,结果为:绩点:0.18 志愿数:0.25 Tag匹配度:0.32 时间匹配度:0.25. 每个社团加权计算出报名学生的得分后,依据得分高低录取学生,得到最终的录取列表。 2.流程图
评价算法
算法是按照比较公平的方式决定录用那些学生,对于社团来说,有助于招收到更适合自己的成员,但对于学生来说,会有一大部分人最终无法成功加入社团且测试结果表明,学生总数越多,最后无社团人数占比越大,这是一个很大的不足的地方。
关键代码
按照定好的公式算出得分并放入列表 void calculate(Students stu) { int i = 0; for (vector::iterator it_s = stu.aspi.begin(); it_s != stu.aspi.end(); ++it_s) { double sum = 0; int k; k = get_department(*it_s);sum += stu.gpa * 0.18; sum += point_num_aspi(stu) * 0.25; sum += point_num_tag(stu ,depart[k]) * 0.32; sum += stu_dep_time(stu ,depart[k]) * (-3) * 0.25; depart[k].csm_list.push_back(sum); depart[k].ID_list.push_back(stu.stuID); depart[k].num_mem += 1;}
}
运行结果
s200-d20-in.json
S200-d20-out.json