Хороший алгоритм / метод, чтобы найти перекрывающиеся значения из свойств объектов? - PullRequest
2 голосов
/ 07 февраля 2012

Я делаю заявку на определение времени.Важные классы:

Period
    id: int
    clazz: Clazz  
SubjectTeacher
    subject: String
    teacher: String
    clazz: Clazz
    AllocablePeriods: List<Period>

Вот пример данных, где Джейн и Джон преподают в одном классе, а Джейн в другом классе.

{sub435, Jane-Algebra-Class1, {1,2,3,4,5,6,7,8}}
{sub124, Jane-Calculus-Class2, {9,10,11,12,13,14,15,16}}
{sub875, John-English-Class1, {1,2,3,4,5,6,7}} //he cannot take #8

Моя цель состоит в том, чтобыобнаружить возможных обменов для каждого SubjectTeacher.Например, в приведенном выше примере Jane-Algebra-Class1 и John-English-Class1 имеют потенциальные перестановки

{1,Jane-Algebra-Class1,John-English-Class1}
{2,Jane-Algebra-Class1,John-English-Class1}
...
{7,Jane-Algebra-Class1,John-English-Class1}

Что такое хороший алгоритм / метод для обнаружения всех возможных перестановок для всех SubjectTeacher с?

1 Ответ

2 голосов
/ 07 февраля 2012

Я ожидаю, что число AllocablePeriods относительно невелико.Тогда вы можете выполнять итерацию по всем учителям, повторять по всем их периодам и добавлять каждый такой период в карту, отображающую идентификатор периода для учителей, которые могут обучать в течение этого периода:

Map<Integer, List<String> > periodTeachersMap = new HashMap<Integer, List<String>>();
for (Teacher teacher: teachers) {
   for (AllocablePeriod period: teacher.getPeriods()) {
       if (periodTeachersMap.get(period.getId()) == null) {
           periodTeachersMap.put(period.getId(), new ArrayList<String>());
       }
       periodTeachersMap.get(period.getId()).add(teacher.getName());
   }
}

После этого циклаВ каждом периоде у вас будет 1005 учителей, которые могут преподавать в нем.Если вы хотите сами пары, вы можете легко построить их из списка.Я надеюсь, что это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...