这是我的问题:我正在设计一个应用程序,允许学生选择他们想要在本学期学习的课程,并为他们创建潜在的课程安排。每个类通常有几个可能在不同时间发生的部分。
所以我正在寻找一个好的数据结构来开发一个能够做到这一点的算法。
有没有一种常见的方法可以做到这一点?我可以应用于这种情况的任何数据结构和/或算法?我正在寻找一个开始的地方。
编辑:课程往往是星期一,星期三,星期五或星期四,星期四。在很多情况下,也会在一周的不同时间发生实验室或朗诵
谢谢, 罗布
答案 0 :(得分:1)
我会用树
在每个节的每个节点(代表一个类)分支和一个不参加课程的附加分支
您可以随时修改调度冲突
只要你没有永久存储这些,并且每个学期每个学生不包含太多课程,这不应该太大
树将根植于任意类。来自root的每个分支都是该类的一部分(以及不接受它的额外分支) 然后在每个分支的末尾,您有更多的节点。这些节点都代表你在日程安排中适合的第二类 这些节点中的每一个都将为第二类的每个部分具有另一个分支。等等。
例如:
math
/ / \
2:00 1:00 blank
| | |
p.e p.e p.e
/ \ / \ / \
2:00 blank 2:00 blank 2:00 blank
|
conflict
答案 1 :(得分:1)
每个班级每周都有相同的时间表吗?或者他们是否像我的一样,其中一些是MWF,其他人是TuTh,其他人是星期六?
如果所有课程都在一周中的每一天同一时间,那么该模型非常简单。您需要学生,班级,班级和学生计划表。
对于您的classSection表,因为每天的课程时间不同,如果他们每周都是同一天,您可以包含一周中每一天的字段(M-Sa),开始时间,课程长度(以小时为单位),当然还有classCodeID。
至少:
Student
ID
Class
classCodeID
description
classSection
classCodeID
classSectionID
isOnM
isOnTu
isOnW
isOnTh
isOnF
isOnSat
startTime
length
studentSchedule
studentID
classCodeID
classSectionID
你也可以规范化一周中的日子,而不是将它们放在classSection表中,但我喜欢在一堆复选框中看到这一周。
我发现你每周有多个开始时间,所以你需要在classSection表中有另一个ID字段。
您的应用程序似乎没问题,您是否已拥有数据模型?看起来你甚至不需要成为一名学生来看班级时间表。
答案 2 :(得分:1)
这是遗传算法适用的问题。至少,我的大学工作人员开发了一种基于它的算法。以下是他们提交技术的一些论文。
http://morgoth.zemris.fer.hr/people/Marko.Cupic/files/2009-425555.EvoCOP_2009.pdf
http://morgoth.zemris.fer.hr/people/Marko.Cupic/files/2009-422047.iti2009.pdf