Комбинации упорядочения для максимальной эффективности

Так недавно мне дали задачу, которую я обдумывал и до сих пор не могу решить; Мне было интересно, может ли кто-нибудь указать мне в правильном направлении, предоставив мне псевдокод (или хотя бы приблизительный набросок псевдокода) для этой проблемы. PS Я буду создавать на PHP, если это имеет значение ...

Спецификации

Есть ~ 50 человек (в этом примере я просто назову их a, b, c ...) и пользователь собирается сгруппировать их в группы по три человека (люди в группах могут перекрываться), и в итоге будет 50-100 групп (т.е. {a, b, c}; {d, e, f}; {a, d, f}; {b, c, l} ...). *

Пока это просто, это вопрос создания html-формы и обработки ее в многомерный массив


В течение дня существует ~ 15 временных интервалов (например, 9:00 AM, 9:20 AM, 9: 40 утра ...). Каждой из этих групп необходимо встречаться один раз в течение дня. И в течение одного временного интервала человек не может быть дважды забронирован (например, «а» не может быть в 2 разных группах в 9:40).

Здесь становится сложно, но не невозможно, я могу предположить, как это сделать перебором (выберите наборы групп, которые не перекрываются (например, {a, b, c}; {l, f, g}; {q, n, d} ...), а затем просто поместите каждую в временной интервал


Наконец, график, который я вывожу, должен быть «оптимизирован», я имею в виду, что у «а» должно быть минимальное время между встречами (так, если его первая встреча в 9:20, его вторая встреча не должно быть в 14:00).

Вот где я заблудился, я только предполагаю, что построю много-много расписаний, а затем ранжирую их на основе среднего времени ожидания, которое человек имеет от одной встречи к следующему


Однако мои «решения» (я не решаюсь называть их так) требуют слишком много грубой силы и требуют слишком много времени для создания. Существуют ли более простые и элегантные решения?

6
задан Tomas 19 June 2011 в 03:37
поделиться