我需要开发一个课程时间表软件,可以有效地分配时间段和房间.这是一个基于课程的例程,而不是基于后期注册.并且有效地意味着课程根据工作人员的时间偏好分配时间段,并且还需要最小化第1年 - 第2年课程重叠,以便第2年学生可以重新学习他们未能通过的课程.(以及3至4年级的学生) .
现在,起初我认为这将是一个容易的问题,但现在看起来不同了.我看过的大多数论文都使用遗传算法/ PSO /模拟退火或这些类型的算法.我仍然无法将问题解释为GA问题.令我困惑的是为什么几乎没有人建议使用DFS或图形着色算法?
如果使用DFS/graph-coloring,有人可以解释这个场景吗?或者为什么不建议或尝试他们.
algorithm mathematical-optimization combinatorics genetic-algorithm evolutionary-algorithm
有没有简单的方法来获取存在相同值的键?或者更重要的是,我怎样才能获得相同值多次出现的次数?
考虑一下hashmap:
1->A
2->A
3->A
4->B
5->C
6->D
7->D
Run Code Online (Sandbox Code Playgroud)
这里相同值多于一次发生3次(两次,D次一次).那是(3)我想要的回报.
我可以通过keyset/map.values()列表遍历hashmap,但这样做似乎相当麻烦.任何建议或解决方案?
编辑: 我的背景是,我正在研究时间表生成器.时隙的数据结构是
{String day-hour, HashMap<String,Event> Rooms}
Run Code Online (Sandbox Code Playgroud)
对于一天的工作时间,会在客房地图上指定一些事件.在检查解决方案的适用性时,我需要知道是否在同一时间为一名员工分配了多个事件.因此,我想通过值Event.getStaff()检查Rooms map中有多少违规.
编辑: 值是这里的对象,我不想计算相同对象的出现次数,而是计算对象的字段.EVENT对象有一个现场工作人员,我需要计算多次出现的员工.