Жадное планирование событий

Нам дается N диапазонов смещений дат, когда в организации присутствует N сотрудников. Что-то вроде
1-4 (т.е. сотрудник придет 1, 2, 3 и 4 день )
2-6
8-9
..
1-14
Мы должны организовать мероприятие за минимальное количество дней, чтобы каждый сотрудник мог посетить мероприятие как минимум дважды. Предложите алгоритм (вероятно, жадный) для этого.
PS: Мероприятие однодневное.


person Devender Goyal    schedule 29.08.2012    source источник
comment
Событие должно происходить в последовательные дни?   -  person Bartek Banachewicz    schedule 29.08.2012


Ответы (2)


Если ваши данные малы, вы можете просто перебрать их. Выберите все возможные комбинации из 2 дней. Для каждой комбинации попробуйте ее и посмотрите, сможет ли каждый посетить обе. Если нет, выберите все возможные комбинации из 3 дней, посмотрите, смогут ли все посетить 2 дня из 3 и так далее. Это экспоненциально, но может быть не так уж плохо для ваших целей.

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

person Keith Randall    schedule 29.08.2012

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

Maintain a num count for all intervals. (Initialize all to 0)
If num = 0 place the two events on the last two days of this interval. 
If num = 1 place one event on the last day of this interval
If num = 2 already two events have been covered for this interval.

Размещение события в интервале может привести к увеличению числа последующих событий.

person Sajal Jain    schedule 27.11.2012