涉及时间间隔及其重叠的问题

时间:2018-01-23 12:28:02

标签: algorithm data-structures

我最近遇到了很多涉及时间间隔作为输入的问题。一些时间间隔是重叠的。并且根据您的需要,您必须对输入执行优化,最大化或最小化操作。我无法解决这些问题。事实上,我甚至无法开始考虑这些问题。

以下是一个例子:

  1. 让我们说,您是资源持有者。这种资源可以无限供应。

  2. 有些人在特定时间间隔内需要该资源。例如:下午4点至晚上8点

  3. 可能存在重叠间隔。例如:下午5点至晚上7点,下午3点至6点 等。

  4. 根据这些间隔及其重叠性质,您必须确定需要多少个不同的这些资源实例。

    实施例。输入:

         8 am - 9 am
         8:30 am to 9:15 am
         9.30 am to 1040 am
    
         In this case, the first two intervals overlap. So two instances of resources will be required. The third interval is not overlapping, so the person with that interval can reuse the resource returned by any of the earlier ones.
    

    因此,在这种情况下,所需的最少资源是2.

    我不需要解决方案。我需要一些关于如何解决的指示。有没有解决这些问题的算法?我应该阅读/学习什么。是否有任何可能有用的数据结构。

2 个答案:

答案 0 :(得分:6)

在任何时刻T重叠的间隔数是小于T的间隔开始时间的数量减去小于或等于T的间隔结束时间的数量。 其中许多问题,如上面的特定问题,可以通过将开始和结束时间分别放入排序列表或树中来解决,这样您就可以找出有关这些计数如何随时间变化的信息。

要解决此问题,例如,在单个列表中对开始和结束时间进行排序:

800S, 900E, 830S, 915E, 930S, 1040E

然后对它们进行排序:

800S, 830S, 900E, 915E, 930S, 1040E

遍历列表并计算,每个开始时间加1,每个结束时间减1:

     1     2     1     0      1     0

重叠间隔的最大数量为2。

答案 1 :(得分:5)

为解决此类问题,您需要使用的数据结构是The Interval Graph。 Interval Graph每个区间都有一个顶点,每对顶点之间的边对应于相交的区间。

以下间隔图对应于示例中的三个间隔的集合:

interval graph

A: 8:00-9:00
B: 8:30-9:15
C: 9:30-10:40

此数据结构捕获涉及间隔的大多数问题的相关方面,从而有助于有效地解决它们。此外,给定一组区间(由2元组列表表示),您可以在多项式时间内构造区间图。

对于区间图,可以有效地解决许多一般图形中NP难的问题,例如找到Maximum Weight Independent Set或找到Optimal Coloring

要解决您指定的特定问题,首先构造区间图G,同时为每个顶点存储其相应区间的结束时间。同时初始化一组资源R={1},它首先只包含一个资源:资源编号1.根据完成时间按排序顺序考虑v的每个顶点G。分配到v资源编号i,其中iRv的邻居未使用的最小资源v。如果不存在此类资源(因为R的邻居使用i=max{R}+1中的所有资源),请将新资源R插入v并将其分配给{{1} }}。最佳资源数量(也就是问题的解决方案)是集合R的大小。