以间隔集

时间:2015-12-17 08:15:46

标签: algorithm optimization pattern-matching intervals

假设我注册了一组“开启”间隔[tstart,tend]

a = [[0+t, 3.9+t], [7.1+t, 8.0+t], [9.02+t, 10.2+t]]

如何找到此模式的最佳匹配偏移量t以匹配另一组间隔:

b = [[5, 6], [7, 10], [11, 15], [18, 19], [20, 21] ... ]

[ t  ]

      ----   - -

- --- ----   - - --- -- ----    - --

2 个答案:

答案 0 :(得分:-1)

平凡算法(不一定非效率):选择偏移量t的所有值,使得每个集合中的一个间隔在其起点或终点对齐。对于这些偏移值中的每一个,计算总重叠以找到最大值。复杂度为O(n ^ 3),其中n是集合的大小(a和b的最大值)。给定偏移的重叠计算为O(n),可能的偏移值的数量为O(n ^ 2)。

在您的示例中,抵消将是:
匹配区间a [0]的开头到b:

中所有区间的开头

5-0 = 5,7-0 = 7,11 = 0 = 11,....

将区间a [0]的结束与b:

中所有区间的结束相匹配

6-3.9 = 2.1,10-3.9 = 6.1,15-3.9 = 11.1,......

我们继续对a中的所有间隔执行相同操作,并收集所有生成的偏移值。然后我们计算每个偏移的重叠。

答案 1 :(得分:-1)

您可以定义:

  • f(x,t) = 1 if x in a_t, 0 otherwise
  • g(x) = 1 if x in b, 0 otherwise

并计算:

argmax_t (inegral on R of f(x, t)g(x)dx)