Существует общий алгоритм, я могу использовать, чтобы решить следующие задачи:Распределение временных интервалов Алгоритм
Дано:
фона: Месяц, который содержит от 0 до 1000 событий (любое число на самом деле). Каждое событие имеет дату начала и окончания. События проводятся в комнатах по одному (без совпадений, однако последующие события позволяют делиться концами и датировать даты друг с другом). Количество номеров не ограничено.
Задача: выделить комнаты для таких мероприятий, чтобы количество комнат, необходимых для проведения ежемесячных мероприятий, было сведено к минимуму.
Хотя полное решение высоко ценится, я ищу любые направления, умные идеи.
class Event:
- int Id;
- DateTime StartDate;
- DateTime EndDate
class Allocation:
- int EventId
- int RoomId
так я ищу:
// roomIds is Enumerable.Range(1, int.MaxValue)
IEnumerable<Allocation> GetAllocations(IEnumerable<Event> events, IEnumerable<int> roomIds, int year, int month)
{
...
}
Это домашнее задание? Что вы пробовали? – MoonKnight
Я думаю, что основная идея, если вы не ищете оптимальную производительность, - это проверить все возможные комбинации с помощью рекурсии (или со стеком). Затем просто отфильтруйте рабочую комбинацию, в которой используются наименьшие комнаты. –
Не имеет значения, есть ли это или нет, просто придерживайтесь темы. Я пробовал жадный алгоритм, используемый для отказа от изменений, искал побочное мнение. – user1514042