在可能的情况下,将一组任意间隔转换为一组连续间隔

时间:2013-10-28 13:08:37

标签: algorithm intervals

我有一个实际情况,我需要尽可能减少数据量。

假设我给出了一组正常数字的间隔。 例如N1 = {(0,1),(1,2),(3,4)}; 我想将此设置最小化为: N2 = {(0,2),(3,4)};

基本上我需要的是将多个小间隔组合成连续的间隔,尽可能。

这有什么聪明/有效的算法吗?因为我想避免每次使用效率低下。

*如果此问题有一些众所周知的名称,请在评论中注明。

1 个答案:

答案 0 :(得分:2)

这是sweep-line algorithm

  • 将间隔分为起点和终点。

  • 对点进行排序。

  • 让count = 0。

  • 迭代点:

    • 每当遇到终点时:

      • 减少计数。

      • 如果count = 0,请记录此点。

    • 每当遇到起点时。

      • 如果count = 0,请记录此点。

      • 增加点数。

作为技术说明,在排序时,如果起点和终点都具有相同的值,则将起点放在第一位,否则可以将其记录为间隙,而不是连续间隔。

示例:

(0,1],(1,2],(3,4]

Split    0 start, 1 start, 1 end, 2 end, 3 start, 4 end
Count       1        2        1     0        1      0
Record      (0      N/A      N/A    2]      (3      4]

获取录制的值会为我们提供{(0,2], (3,4]}