3 Giải thuật tham lam và kết quả thực nghiệm
3.3 Mã hóa giải thuật
Input:
- Danh sách phòng học: mỗi phòng học bao gồm các thuộc tính: ID, tên và dung lượng của phòng học đó.
Gọi số phòng học lànroom. Khi đó, danh sách phòng học:
roomList= [room1, room2, ..., roomnroom], trong đó
roomi= [roomIDi, roomN amei, roomCapacityi], i= 1, nroom.
- Danh sách nhóm sinh viên: mỗi nhóm sinh viên bao gồm các thuộc tính: ID, tên, kích thước và danh sách phòng học được sắp xếp theo thứ tự phù hợp với nhóm sinh viên đó.
Gọi số nhóm sinh viên làngroup. Khi đó, danh sách nhóm sinh viên: groupList= [group1, group2, ..., groupngroup], trong đó
groupi= [groupIDi, groupN amei, groupSizei, groupRoomi], i= 1, ngroup. - Danh sách môn học: mỗi môn học bao gồm mã môn học, tên và thời lượng của môn học đó. Gọi số môn học lànsubject. Khi đó, danh sách môn học:
subjectList= [subject1, subject2, ..., subjectnsubject], trong đó
subjecti= [subjectIDi, subjectN amei, subjectDurationi], i= 1, nsubject.
- Danh sách mã lớp học: mỗi mã lớp học bao gồm ID, môn học và nhóm sinh viên học môn đó. Gọi số mã lớp học lànclass. Khi đó, danh sách mã lớp học:
classList= [class1, class2, ..., classnclass], trong đó
classi= [classIDi, subjectj, groupk], i= 1, nclass, j∈ {1,2, ..., nsubject}, k∈ {1,2, ..., ngroup}.
Bước 1:
- Khởi tạonday=số ngày,nperiod=số tiết học trong ngày. N =nday∗nperiod là số tiết của một tuần.
matrix=
(1, room1) (1, room2) · · · (1, roomnroom) (2, room1) (2, room2) · · · (2, roomnroom)
..
. ... . .. ...
(N, room1) (N, room2) · · · (N, roomnroom)
Chương 3 20
Luận văn thạc sĩ Nguyễn Thị Phương
f ree= [(1, room1),(1, room2),· · ·,(1, roomnroom),· · · ,(N, room1),(N, room2),· · ·,(N, roomnroom)]
- Khởi tạo groupDict = groupN ame1: [ ], groupN ame2: [ ], ..., groupN amengroup : [ ] lưu danh sách các tiết học mà mỗi nhóm sinh viên học sau mỗi vòng lặp.
Bước 2:
Với mỗi mã lớp họcc∈classList: - Khởi tạoindex= 0.
- Xét phần tử tại vị tríindextrongf ree:f ree[index]
- Xét tiết học tạif ree[index]:
start_time=f ree[index][0]
end_time=start_time+thời lượng của mã lớp họcc−1
Bước 3: Kiểm tra số tiết liên tiếp còn trống có đủ cho thời lượng của môn học hay không?
- Kiểm tra số tiết liên tiếp có đủ cho thời lượng môn học hay không? Nếu không,index tăng lên 1, quay lại bước 2.
Giả sử một ngày cóttiết.
r1 là số dư khi chiastart_time chot, r2là số dư khi chiaend_time chot,
Ifr1> r2:index=index+ 1.
- Kiểm tra các tiết liên tiếp đó còn trống hay không? Nếu không,index tăng lên 1, quay lại bước 2. Foritem=start_time;start_time+ 1;...;start_time+ thời lượng của mã môn họcc−1,
If(item,phòng học tạif ree[index])not inf ree:index=index+ 1.
Bước 4: Kiểm tra dung lượng phòng học có phù hợp với kích thước của nhóm sinh viên hay không? Nếu không phù hợp,index tăng lên 1, quay lại bước 2.
If phòng học tạif ree[index]not in danh sách phòng học của mã lớpc:index=index+ 1.
Bước 5: Kiểm tra nhóm sinh viên đã học tại thời gian đó hay chưa? Nếu học,index tăng lên 1, quay lại bước 2.
Foritem=start_time;start_time+ 1;...;start_time+ thời lượng của mã môn họcc−1, IfitemingroupDict[nhóm sinh viên của mã môn học c] :index=index+ 1.
Bước 6: Gán mã lớp họcc cho các tiết trong f ree. Cập nhật danh sách thời gian-phòng học còn trốngf reevà danh sách các tiết mà mỗi nhóm sinh viên đã họcgroupDict.
Quá trình lặp lại cho đến khi tất cả các mã môn học trongclassListđều được duyệt qua.
Luận văn thạc sĩ Nguyễn Thị Phương