结对NO.2
1. 引言
1.1 项目地址
1.2 项目简介
按照老师给的项目要求:“编码实现一个部门与学生的智能匹配的程序”。由于数据需要自己生成,所以该项目主要分为两个子程序:数据生成模块与匹配模块。
(1) 数据生成模块
(2) 匹配算法模块
2. 数据生成模块
2.1 算法思想
2.2 具体实现
3. 数据匹配模块
3.1 算法思想
3.2 具体实现
4. 代码规范
4.1 规范要点
- 由于C++语言的复杂性,再加上我们的项目规模不是很大,我们当即决定不用继承。虽然在匹配算法中使用抽象类可以提高代码的复用性和封装型,但是相比之下运算符的重载更易实现。
- 尽量避免使用new和delete。由于我们对于vs编译器的内存管理并不是很了解,所以这可能导致对象的管理不符合我们自身的预期;但当需要生成对象数量过多时,可以用new生成对象实体,但不要忘了使用后用delete释放资源。
- 把所有的清理工作都放在析构函数中。如果有些资源在析构函数之前就释放了,也要重置这些成员为0或NULL。
- 在设计按绩点优先或活动时间长度优先的算法时可以优先考虑运算符()的重载。
- 由于学生和部门对象多数只用于封装信息,所以可以考虑用struct实现它们。
4.2 相关代码
struct departments
{
std::string id;//部门id
std::string name;//部门名称
int num;//招收人数
std::vector<std::string> tag;//标签
std::vector<std::string> freetime;//空闲时间段
};
//绩点降序比较结构体 ————重载()操作符
struct CmpMark
{
bool operator()( const student &k1, const student &k2)
{
//绩点降序
return k1.getMark() > k2.getMark();
}
bool operator()(const student &k1, const student &k2)
{
//绩点相同时学号优先
return k1.getId() < k2.getId();
}
};
5. 分析评价
5.1 评价标准
对于该项目的评价主要有两个方向:对于同一组输入,输出的未被导师选中的学生数越少越好;不同优先条件下,算法的执行时间越短越好。(在同一优先条件下,我们可以通过观察匹配学生人数来对数据生成模块进行反向优化.)
5.2 算法测试报告
| 优先条件 | 部门总纳新人数 | 匹配学生个数 | 未匹配学生个数 | 实际耗时(秒) | 输出文件路径 | 输出文件路径 |
|-----------------------------------------|-----------------------------------------|------------------|------------------|----------------------|-----------------------------------------------|
| 绩点优先 | 242 | 182 | 118 | 0.39 | https://github.com/willJefferson/clubProject/blob/master/output_condition1.txt |
| 活动时长优先 | 242 | 183 | 117 | 0.335 |https://github.com/willJefferson/clubProject/blob/master/output_condition2.txt
|
6. 结对感受
(1)张松
(2)潘伟靖