Создание потенциальных графиков для студентов колледжа - PullRequest
0 голосов
/ 16 сентября 2010

Вот моя проблема: я разрабатываю приложение, которое позволит студентам выбирать классы, которые они хотят взять в течение семестра, и создавать для них потенциальные макеты расписания.Каждый класс обычно имеет несколько возможных разделов, которые встречаются в разное время.

Итак, я ищу хорошую структуру данных для разработки алгоритма, который будет это делать.

Есть ли общий способ сделать это?Какие структуры данных и / или алгоритмы я могу применить в этой ситуации?Я просто ищу место для начала.

РЕДАКТИРОВАТЬ: классы, как правило, понедельник, среда, пятница или вторник, четверг.Во многих случаях есть также лаборатории или чтения, которые происходят в разное время в течение недели

Спасибо, Роб

Ответы [ 3 ]

1 голос
/ 16 сентября 2010

У каждого класса одно и то же расписание каждый день недели? Или они такие, как у меня, где одни были MWF, другие TuTh, а другие Sat?

Если все занятия проводятся в одно и то же время каждый день недели, модель довольно проста. Вам нужны таблицы для студентов, классов, классов и расписаний студентов.

Для вашей таблицы 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, но мне нравится видеть, как неделя отображается в виде нескольких флажков.

Я вижу, что у вас несколько раз в неделю, поэтому вам понадобится другое поле ID в таблице classSection.

Приложение у вас, кажется, нормально, у вас уже нет модели данных? Похоже, вам даже не нужно быть студентом, чтобы увидеть расписание занятий.

1 голос
/ 16 сентября 2010

Это проблема, когда подходят генетические алгоритмы. По крайней мере, мои сотрудники университета разработали алгоритм на его основе. Вот некоторые из их работ, где представлена ​​техника.

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

1 голос
/ 16 сентября 2010

Я бы использовал дерево
В каждом узле (который представляет класс) ветвь для каждого раздела и дополнительная ветвь для отказа от курса
Вы можете в любое время сократить конфликты планирования

Это не должно быть слишком большим, если вы не храните их вечно, и если вы не включаете слишком много курсов на одного учащегося в семестр


Дерево будет иметь корни в любом произвольном классе. Каждая ветка от root будет разделом этого класса (и дополнительной веткой, если он не будет взят) Затем в конце каждой из этих веток у вас будет больше узлов. Все эти узлы будут представлять второй класс, который вам подходит в расписании.
Каждый из этих узлов будет иметь другую ветвь для каждого раздела второго класса. И так далее.

например:

              math  
 /            /           \  
2:00        1:00         blank  
  |           |             |  
 p.e          p.e           p.e  
/    \        /   \        /  \   
2:00  blank  2:00  blank  2:00 blank  
 |  
conflict
...