我正在尝试实施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中轻松实现了这种方法,但我认为它可能不是作者的意图。他们是否意味着保留与上面其他项目的任何不重叠的项目?如果有人解释了什么"贪婪的选择"我会很感激。在这种情况下意味着。
答案 0 :(得分:1)
你几乎到最后都是正确的(并且在没有的情况下,你提出正确的解释作为选项)。
首先,正如你所说,对事物进行排序以使长度减少:
ID LENGTH START END
2 20000 5 20005
4 500 30500 31000
5 200 900 1100
3 20 30500 30520
现在我们会贪婪地选择间隔,只要它们与先前选择的任何不冲突。因此,选择的集合最初为空,
结果是 {2,4,5} ,因此。
仅供参考,这与计算机科学中一个众所周知的问题密切相关 - 区间调度。如果您尝试优化匹配的总数量,而不是匹配的总长度,则为sort by end position and greedily choose。