分组间隔的有效算法

时间:2017-03-13 16:08:30

标签: algorithm scheduling intervals greedy

我需要找到一种解决以下问题的算法:

给定一个间隔列表(leftBound,RightBound),这是在此行为中对间隔进行分组的最有效算法:

间隔: (1,4),(6,9),(1,3),(4,8),(6,9),(2,7),(10,15)

通缉解决方案:

组(2,3)含有(1,3),(1,4),(2,7)

组(6,8)包含(4,8),(6,9)

组(10,15)包含(10,15)

当然有不同的可能解决方案:(2,7)也可能在第二组中。

我的方法是按照左边界对上升的间隔进行排序,如果它们的左边界限相同则按其右边界下降。然后我只是循环排序的间隔,并尝试将它们添加到我刚刚构建的组中。如果这是不可能的,我会为此时间间隔构建一个新组,并继续循环其余的订单。

这个算法是否保证,我的间隔时间内收到尽可能少的不同组?你能说这是解决这个问题的贪婪方法吗?

1 个答案:

答案 0 :(得分:0)

这是一个建议:

  1. 按右边界排序:(1,3), (1,4), (2,7), (4,8), (6,9), (6,9), (10,15)

  2. 创建具有最低条目的组(rightBound - 1,rightBound)并将其删除:(2,3): (1,3)

  3. 将所有可能的时间间隔添加到论坛并将其删除:(2,3): (1,3), (1,4), (2,7)

  4. 重复2.和3.直到列表为空:1. (2,3): (1,3), (1,4), (2,7); 2. (7,8): (4,8), (6,9), (6,9); 3. (14,15): (10, 15)

  5. 可选:将组扩大到最大大小或使用最小条目作为组间隔(2.)并在添加间隔时增加左边界(3.)。

  6. 我认为它应该给出最少数量的组,因为在第2步中我们创建了一个无法避免的组,然后在第3步中,我们将所有内容添加到其中。