事件安排贪婪

时间:2012-08-29 17:58:58

标签: algorithm greedy

当N名员工出现在我们面前时,我们会获得N个日期偏移范围 组织。像什么一样的东西 1-4(即员工将在第1天,第2天,第3天和第4天到来)
2-6
8-9
..
1-14
我们必须以最少的天数组织一次活动 员工可以参加活动至少两次。请建议算法(可能是贪婪的)来做到这一点 PS:活动是一天活动。

2 个答案:

答案 0 :(得分:2)

如果你的数据很小,你可以蛮力。选择所有可能的2天组合。对于每种组合,尝试一下,看看是否每个人都可以参加。如果没有,请选择所有可能的3天组合,看看每个人是否可以参加3个中的2个,依此类推。这是指数级的,但对于你的目的可能不是那么糟糕。

贪婪的方法是计算每天有多少人在工作,并选择最多人数的一天。重复,计算每天工作的人数谁还没有安排两个事件并选择最多人数的一天。当然,不要在同一天选两次。

答案 1 :(得分:0)

我认为这可以通过以下关于使用结束日期排序的事件的贪婪方法来完成

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.

在一个间隔中放置事件可能会导致后续事件的num计数增加。