确定重叠间隔

时间:2016-10-21 19:28:58

标签: python-2.7 intervals

我有两台机器,每台机器都有一段时间间隔,它作为起点列表和间隔终点列表(例如[0,5,9]和[3] ,6,13]表示机器在0到3,5到6和9到13之间工作。

我想确定如何计算一台机器正好工作的间隔的起点和终点,而且正好两台机器在同一时间工作。

例如,如果第二个机器间隔的起点和终点是[0,7]和[2,10]那么正好一台机器工作的间隔的起点和终点是[2,5,7, 10]和[3,6,9,13]以及两台机器正在工作的间隔的起点和终点是[0,9]和[2,10]。

我希望能够将其概括为三台或更多台机器。

这就是我所拥有的:

overlapping_interval_starts = {}
overlapping_interval_ends = {}
whole_list = [(start, 's') for start in interval_starts] + [(end, 'e') for end in interval_ends]
whole_list.sort()

count = 1
if whole_list:
    previous, _ = whole_list.pop(0)
    for elt, elt_type in whole_list:
        current = elt
        if (count != 0) and (previous != current):
            try:
                overlapping_interval_starts[count].append(previous)
                overlapping_interval_ends[count].append(current)
            except KeyError:
                overlapping_interval_starts[count] = [previous]
                overlapping_interval_ends[count] = [current]

        if elt_type == 's':
            count += 1
        else:
            count -= 1
        previous = current

它适用于我的示例问题,但我不确定如何验证它是否正确。

例如,在以下问题上运行它:

Machine 1: [2, 7], [6, 11]
Machine 2: [1, 5, 11], [3, 10, 13]
Machine 3: [2, 6], [5, 8]

的产率:

overlapping_interval_starts = {1: [1, 10, 11],
                               2: [3, 5, 6, 8],
                               3: [2, 7]}
overlapping_interval_ends = {1: [2, 11, 13],
                             2: [5, 6, 7, 10],
                             3: [3, 8]}

技术上是正确的,但实际上只有两个机器重叠的间隔(3到7和8到10)。所以我很难看到我怎么能确定它的效果如何。

1 个答案:

答案 0 :(得分:1)

从第一个时间戳开始,逐步完成整个时间轴。换句话说......

获取所有不同开始时间列表的最短开始时间。在此时开始的间隔期间,有一台机器工作,调用该机器。

在M以外的所有计算机的剩余开始时间和M的结束时间中,找到最小时间戳。如果它是一个开始时间,则增加一次工作的计算机数量。如果它是一个结束时间,则减少工作的计算机数量。

继续这样做,直到你没有时间戳。每当您发现开始时间是最短时间时,您就会切换到查看该计算机的结束时间。每当您发现结束时间是最短时间时,您就会切换到查看该计算机的开始时间。

这是一个可视化:

Computer A:     0-----3   5-6     9-------13
Computer B:     0---2         7-----10
                ^
Minimum stamp:  0
Number working: 1
As of time:     0

##################################################

Computer A:     X-----3   5-6     9-------13
Computer B:     0---2         7-----10
                ^
Minimum stamp:  0
Number working: 2
As of time:     0

##################################################

Computer A:     X-----3   5-6     9-------13
Computer B:     X---2         7-----10
                    ^
Minimum stamp:      2
Number working: 2   1
As of time:     0   2

##################################################

Computer A:     X-----3   5-6     9-------13
Computer B:     X---X         7-----10
                      ^
Minimum stamp:        3
Number working: 2   1 0
As of time:     0   2 3

##################################################

Computer A:     X-----X   5-6     9-------13
Computer B:     X---X         7-----10
                          ^
Minimum stamp:            5
Number working: 2   1 0   1
As of time:     0   2 3   5

##################################################

Computer A:     X-----X   X-6     9-------13
Computer B:     X---X         7-----10
                            ^
Minimum stamp:              6
Number working: 2   1 0   1 0
As of time:     0   2 3   5 6

##################################################

Computer A:     X-----X   X-X     9-------13
Computer B:     X---X         7-----10
                              ^
Minimum stamp:                7
Number working: 2   1 0   1 0 1
As of time:     0   2 3   5 6 7

##################################################

Computer A:     X-----X   X-X     9-------13
Computer B:     X---X         X-----10
                                  ^
Minimum stamp:                    9
Number working: 2   1 0   1 0 1   2
As of time:     0   2 3   5 6 7   9

##################################################

Computer A:     X-----X   X-X     X-------13
Computer B:     X---X         X-----10
                                    ^
Minimum stamp:                      10
Number working: 2   1 0   1 0 1   2 1
As of time:     0   2 3   5 6 7   9 10

##################################################

Computer A:     X-----X   X-X     X-------13
Computer B:     X---X         X-----XX
                                          ^
Minimum stamp:                            13
Number working: 2   1 0   1 0 1   2 1     0
As of time:     0   2 3   5 6 7   9 10    13

##################################################

Computer A:     X-----X   X-X     X-------XX
Computer B:     X---X         X-----XX
Minimum stamp:                                Done
Number working: 2   1 0   1 0 1   2 1     0
As of time:     0   2 3   5 6 7   9 10    13