嘿所有,提前感谢阅读!
问题是尝试找到一个教师有空的时间,实验室是免费的,并且在课堂上注册的学生是免费的。只有一名教练,大约6个实验室,平均有20名学生。
实验室,教师和学生已经忙碌/忙碌。 时间分为1.5小时,从8-930开始,930-1100一直到330-500。 周一至周五有5天的时间可以考虑。 如果没有一个块可以适合所有学生,教师和实验室,那么课程可以分成几个课程。
以下是我所想的数据库和输入/输出:
数据库:
Table : Lab
Fields : l_id, l_name, l_capacity, BM893, BM9311, BM11123, BM1232, BM233, BM335, BT893, BT9311, BT11123, BT1232, BT233, BT335, BW893, BW9311, BW11123, BW1232, BW233, BW335, BTH893, BTH9311, BTH11123, BTH1232, BTH233, BTH335, BF893, BF9311, BF11123, BF1232, BF233, BF335
(each field representing a block to time for a day… e.g. BM893 is Block Monday 8 – 930, all fields are integers where 0 is free and 1 is occupied/busy)
Table: Student
Fields :s_id, s_name, BM893, BM9311, BM11123, BM1232, BM233, BM335, BT893, BT9311, BT11123, BT1232, BT233, BT335, BW893, BW9311, BW11123, BW1232, BW233, BW335, BTH893, BTH9311, BTH11123, BTH1232, BTH233, BTH335, BF893, BF9311, BF11123, BF1232, BF233, BF335
(each field representing a block to time for a day… e.g. BM893 is Block Monday 8 – 930, all fields are integers where 0 is free and 1 is occupied/busy)
Table: Instructor
Fields : i_id, i_name, BM893, BM9311, BM11123, BM1232, BM233, BM335, BT893, BT9311, BT11123, BT1232, BT233, BT335, BW893, BW9311, BW11123, BW1232, BW233, BW335, BTH893, BTH9311, BTH11123, BTH1232, BTH233, BTH335, BF893, BF9311, BF11123, BF1232, BF233, BF335
(each field representing a block to time for a day… e.g. BM893 is Block Monday 8 – 930, all fields are integers where 0 is free and 1 is occupied/busy)
输入:
1 instructor (i_id)
All labs
N students (s_id, s_id…etc)
输出:
会话的时间段(如果超过 一节而不是每节的s_id 每个部分的学生)
有人可以帮我解决这个算法吗?
非常感谢
答案 0 :(得分:0)
我会有一张桌子,每周一周有5行,M-F
另一张包含时间和开始时间的表格,无论你有多少(0800,0930,...... 1530)
具有日期和时间的笛卡尔积的另一个表(或查询/视图)
另一张包含实验室详细信息的表格(建筑物,房间号等)
另一张包含学生详细信息的表格(学生编号,名字,姓氏)
另一个包含教师详细信息的表(教师ID,姓名,部门)
然后你有忙碌/被占用/不可用的表,其中itemType(实验室或学生或讲师)日忙(m-f),忙碌时间(0800-1530)。您不需要存储空闲时间,因为它们可以从具有所有日期和时间集的笛卡尔积表中导出。
然后你就完成了设置 - 你拥有所需的所有数据,并且可以看到在忙碌表中没有相应行的所有日期和时间集合中是否有任何行。