结对第二次作业
结对第二次作业
成员
- 媛 528
- 佳莹 516
github
设计说明
内部实现设计
类图
匹配算法
1.思路分析
我们将社团录取社员的影响因素列举出来,分别是:绩点、志愿数(填报志愿越多得分越低)、Tag匹配度、时间匹配度共四个影响因素。
因为四个因素的对于录取的影响强度不同,我们准备为个因素分配不同的权重值用来计算学生的最后得分。参考了这篇文章,我们最终选定第三种对偶比较法来分配权重,结果为:绩点:0.18 志愿数:0.25 Tag匹配度:0.32 时间匹配度:0.25.
每个社团加权计算出报名学生的得分后,依据得分高低录取学生,得到最终的录取列表。
2.流程图
评价算法
算法是按照比较公平的方式决定录用那些学生,对于社团来说,有助于招收到更适合自己的成员,但对于学生来说,会有一大部分人最终无法成功加入社团且测试结果表明,学生总数越多,最后无社团人数占比越大,这是一个很大的不足的地方。
关键代码
按照定好的公式算出得分并放入列表
void calculate(Students stu)
{
int i = 0;
for (vector
{
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