贪婪选择非重叠区间

时间:2016-02-13 22:24:17

标签: algorithm sorting bioinformatics greedy

我正在尝试实施this paper中描述的算法(GBDP策略,"匹配距离")并需要一些澄清。

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

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

然后继续贪婪地选择具有非重叠间隔的[项目]的子集。"在这里,我感到很困惑。我知道什么是贪心算法,但我不确定作者的意思。我猜测它们可能只是通过列表,只保留那些与它们之上不重叠的项目。

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

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

我设法在Perl中轻松实现了这种方法,但我认为它可能不是作者的意图。他们是否意味着保留与上面其他项目的任何不重叠的项目?如果有人解释了什么"贪婪的选择"我会很感激。在这种情况下意味着。

1 个答案:

答案 0 :(得分:1)

你几乎到最后都是正确的(并且在没有的情况下,你提出正确的解释作为选项)。

首先,正如你所说,对事物进行排序以使长度减少:

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

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

  1. 最初,2是我们可以做出的最贪婪的选择(长度是20000)。它没有冲突,所以我们将它添加到所选的集合中。
  2. Ditto for 4,and 5.现在选择的集合 {2,4,5}
  3. 下一个贪婪(以及简单的剩余)选择是3.由于它确实与之前的任何冲突,即4,我们无法使用它。
  4. 结果是 {2,4,5} ,因此。

    仅供参考,这与计算机科学中一个众所周知的问题密切相关 - 区间调度。如果您尝试优化匹配的总数量,而不是匹配的总长度,则为sort by end position and greedily choose