背景
栋哥对大家第一次结对编程作业的原型设计感到很满意,为了尽快让同学们使用上软件,于是栋哥花一晚上时间开发了一个点名小程序。但是在上线运行过后,发现了一些问题:
- 大多数老师习惯在每次上课后或下课前的一小段时间内进行点名。
- 如果采用全点的方式,在这段时间里,后端服务器需要处理大量的请求,拥塞导致响应速度变慢,给点名小程序带来极差的使用体验。
- 采用随机抽点的方式,能够有效减少并发量,但是无法保证点名的质量,难以有效抓出没有到教室的同学。
所以栋哥急需大家设计一个算法来解决这个问题,要求能够最小化向后端发送的请求次数,最大化抓出缺勤同学的数量。
具体要求
定义5门课程,每个课程班级人数为90人,一学期共20次课。每门课程均有5-8位同学缺席了该学期80%的课,此外每次课程均还有0-3位同学由于各种原因缺席。
参数定义:
- 请求次数:定义在一次点名中,获取一位同学是否到达课堂的情况为一次请求。
- 有效点名:一位同学缺席该课程的一次课,算法在这次课上抽点到该同学,视为一次有效点名,一次课可包含多次有效点名。
评价标准:
输入
五门课程的全部人员到勤信息
输出
E、五门课程的抽点方案
要求
- 最大化E,该标准将作为确定本次作业作业得分的主要依据之一
- 输入的数据,另外编写生成程序随机实现。
- 为输入输出设计标准化、通用化、可扩展的接口,能为该智能匹配程序模块后期可能的整合入系统提供便利。
- 输入输出的格式,如采用文本文件或数据库的方式输入,可自由讨论确定。
- 可为智能抽点算法额外的添加一些合理的辅助搜索信息,如绩点等,可自由讨论确定。
- 代码具有规范性。
- 实现的程序语言不做限制性要求。
说明:仅就上述内容,实现一个单独的程序模块。不需要和之前的原型整合在一起。
提交作业要求
本次依然通过github进行完成,请结对的同学在一个仓库中提交代码,包含:
- 符合题目要求的数据集生成器,生成的数据需要以文件形式保存。
- 符合题目要求的算法,能够读入所生成数据并输出具体要求中要求的输出结果。
- 在README文件中清楚的介绍如何搭建环境以及运行代码,方便助教进行检查。
此外,需要攥写一篇博客,包含:
- 给出你认为的是重点或难点功能、编程思考,至少2点。
- 给出照片1张,包括结对的2位同学、工作地点、计算机,可选项包括其他能表达结对编程工作经历的物品或场景。
- 结对感受,以及两个人对彼此结对中的闪光点或建议的分享。
- 给出至少2项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。
- PSP 和学习进度条 参考:http://www.cnblogs.com/vertextao/p/7469789.html
- 给出 GitHub 仓库地址和 commit 记录。
- 【可选】给出程序模块运行的视频演示链接。
得分标准(共50分):
项目 | 分值 |
---|
数据集生成 | 8 |
算法设计(创新性等) | 15 |
算法实现($E$值、结果的稳定性等) | 15 |
代码的模块化(易于整合入系统等) | 7 |
开发规范 | 5 |