考虑到学生和导师的可用性,我正在编写一个程序来组建辅导小组.可用性在由字母表示的阻塞时间列表中给出.例如,如果学生将其作为[A,C,D]的可用性,则他在一天的第一,第三和第四个小时内可用.你如何制作一个能够列出学生名单和导师名单的功能,并提供一组最大化学生人数的小组列表?我在
Java工作,但我对算法比对代码本身更感兴趣.更多细节:
小组必须包含3-6名学生和1名导师.
学生只能在一个小组中.
学生满意(放在一个小组中)的人数必须最大化.
例如,假设我们有1-6名学生和两名导师,他们都在A和B时间可用.学生可以在1:A,2:A,3:A,4:AB,5:AB,6获得: B.该算法应返回两组:[1,2,3,tutor1]和[4,5,6,tutor2].这将每个学生分配给某个小组,并且更可取的是,将1-5个放在一个小组中并留下6个小组.
最佳答案 以下是帮助您入门的3个想法.
>贪心算法.将列表中的第一个学生与列表中的第一个兼容导师匹配.将列表中的第二个学生与列表中的第一个兼容导师进行匹配.等等
>找到最“流行”的可用小时,并首先匹配该小时.然后是最受欢迎的,等等
>找到最少“流行”的可用小时,并首先匹配该小时.然后是最不受欢迎的,等等
免责声明:我假设你正在研究一些学习/爱好/管理方便的东西,换句话说,你的项目没有太多的利害关系.如果我的假设是错误的,我建议您需要更多地研究算法,或聘请具有专业知识的人.