Эта проблема сложнее, чем кажется.
Как уже упоминали другие, это NP-полная проблема, но давайте проанализируем, что это значит.
По сути, это означает, что вам нужно рассматривать все возможные комбинации.
Но «посмотри на» мало что скажет о том, что вам нужно делать.
Сгенерировать все возможные комбинации легко. Это может дать огромное количество данных, но у вас не должно возникнуть особых проблем с пониманием концепций этой части проблемы.
Вторая проблема заключается в оценке того, является ли данная возможная комбинация хорошей, плохой или лучше, чем предыдущее «хорошее» решение.
Для этого вам нужно больше, чем просто «возможно ли это решение».
Например, один и тот же учитель работает 5 дней в неделю в течение X недель подряд? Даже если это рабочее решение, оно может быть не лучшим решением, чем чередование двух человек, чтобы каждый учитель работал по одной неделе каждый. О, ты не думал об этом? Помните, вы имеете дело с людьми, а не только с проблемой распределения ресурсов.
Даже если бы один учитель мог работать полный рабочий день в течение 16 недель подряд, это могло бы быть неоптимальным решением по сравнению с решением, в котором вы пытаетесь чередовать учителей, а такую балансировку очень сложно встроить в программное обеспечение.
Подводя итог, можно сказать, что хорошее решение этой проблемы будет дорого стоить многим людям. Следовательно, эту проблему нелегко сломать и решить. Будьте готовы выделить несколько целей, которые не являются стопроцентными, и назвать их «достаточно хорошими».