次の問題を解決するために使用できる一般的なアルゴリズムはありますか?
与えられた:
背景:1か月。0から1000のイベントがあります(実際には任意の数)。各イベントには開始日と終了日があります。イベントは一度に1つずつ部屋で行われます(重複はありませんが、結果として生じるイベントは互いに終了日と開始日を共有できます)。部屋の数は無制限です。
課題:毎月のイベントを開催するために必要な部屋の数が最小限に抑えられるように、イベント用の部屋を割り当てます。
完全なソリューションは高く評価されていますが、私はあらゆる方向性、賢いアイデアを探しています。
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)
{
...
}