非重叠区间的贪婪选择

Greedy Selection of Non-overlapping Intervals

我正在尝试实现 this paper(GBDP 策略,"matching distance")中描述的算法,需要一些说明。

基本上,问题是我有一个项目列表,其中每个项目都有一个长度和一个间隔(实际上是两个间隔,但它是同一个想法)。

ID    LENGTH    START    END
1     1000      1        1000
2     20000     5        20005
3     20        30500    30520
4     500       30500    31000
5     200       900      1100     

目标是找到具有非重叠范围的项目子集。在论文中,他们说他们首先按长度

对项目进行排序
ID    LENGTH    START    END
2     20000     5        20005
1     1000      1        1000
4     500       30500    31000
5     200       900      1100
3     20        30500    30520

然后继续 "greedily choosing a subset of [items] with non-overlapping intervals." 这就是我感到困惑的地方。我知道贪心算法是什么,但我不确定作者在这里的意思。我猜他们可能只是浏览了列表,只保留那些不与上面的项目重叠的项目。

ID    LENGTH    START    END
2     20000     5        20005
4     500       30500    31000
5     200       900      1100
3     20        30500    30520

请注意,使用这种方法,结果仍然包括具有重叠范围(4 和 3)的项目。

我设法在 Perl 中轻松实现了这种方法,但我认为这可能不是作者的意图。他们的意思是保留不与上面其他项目 any 重叠的项目吗?如果有人解释 "greedy selection" 在这种情况下的含义,我将不胜感激。

你几乎到最后都是正确的(在不正确的地方,你提出了正确的解释作为一个选项)。

首先,如您所说,对事物进行排序,使长度递减:

ID    LENGTH    START    END
2     20000     5        20005
4     500       30500    31000
5     200       900      1100
3     20        30500    30520

现在我们将贪婪地选择间隔,只要它们不与之前选择的 任何 冲突。因此,选择的集合最初为空,

  1. 最初,2 是我们可以做出的最贪婪的选择(长度为 20000)。它不冲突,所以我们将它添加到选择的集合中。
  2. 4 和 5 同上。选择的集合现在是 {2, 4, 5}.
  3. 下一个贪婪的(以及简单剩余的)选择是 3。由于它与前面的 any 冲突,即 4,我们不能使用它。

结果是{2, 4, 5},因此。


仅供参考,这与计算机科学中的一个著名问题 - 间隔调度密切相关。如果您尝试优化总 number 场比赛,而不是总 length 场比赛,您 sort by end position and greedily choose.