两个不相交的间隔最小总和

时间:2017-12-28 18:48:37

标签: c++ algorithm sorting intervals

给定N个区间[a,b]成本c的列表,找到2个非重叠区间的最小总和。我在O(n ^ 2)(pastebin.com/kveAZTwv)中有一个算法,但我找不到O(N log N)。

第一个值是间隔数。其他行是:a,b,c其中a是间隔的开头,b是结束,c是成本。

示例:

input :
3
0 10 1
1 2 2
9 12 2



output :
4

1 个答案:

答案 0 :(得分:0)

以下是O(n log n)中算法的基本思想,我相信它可以更有效地完成:

1)对符合其终点的所有间隔进行排序,每个终点都是一个潜在的分裂点,其中右边的间隔和左边的间隔不重叠

2)现在扫描已排序的间隔,并为每个spiltpoint记住左边的最小成本间隔。

3)根据开始点对所有元素进行排序

4)对于每个分裂点,另外记住右边的最小成本间隔(在分裂点之后具有其起始点)。从排序元素的后面到前面进行单次扫描也可以实现这一点

5)为每个分割点添加两个相应的成本并寻找最小值。

抱歉,由于我在移动设备上,这有点不正式。