重叠间隔和最小值

时间:2015-01-03 06:58:55

标签: algorithm computational-geometry intersection intervals

如何确定是否存在满足特定给定条件的一组值。标准是间隔的形式和该间隔内的最小值。

例如,根据标准:

Interval : Minimum value in that interval

{2, 2}   : 5
{1, 4}   : 1
{4, 4}   : 4

可以满足它的一组值是

{1, 5, 1, 4}

另一方面,给出了标准:

Interval : Minimum value in that interval

{2, 3}   : 1
{1, 4}   : 2
{4, 4}   : 4

没有这样的值满足它们。

我想确定是否存在满足给定条件的一组值(即,我只想找到一个算法,如果存在一组满足条件的值则返回true,如果不满足则返回false )。

我知道如何使用O(N ^ 2)强力进行此操作,但如果可能的话,我想要实现O(N lgN)解决方案。


我首次尝试解决此问题涉及合并重叠间隔,然后检查合并间隔的最低值,但我很快意识到这样做并不一定能保证正确答案。

我的第二次尝试涉及分段树,即尝试为每个值分配值,如果您试图覆盖一个间隔,则不存在这样的间隔。但是,这也很快被放弃了,因为即使某些部分被覆盖,您仍然可以获得一组有效的值。

我的第三次尝试涉及间隔树,试图找到两个间隔之间的交叉点并检查是否可以创建一组有效的值。这看起来很有希望,但是它是一个O(N ^ 2)算法,因此也被放弃了。

任何人都可以提供一些见解吗?

1 个答案:

答案 0 :(得分:1)

分配值的想法是正确的。您只需按其最小值(按递增顺序)对间隔进行排序。也就是说,解决方案看起来像这样:

  1. 构建分段树(在所有节点中都包含-infinity值)。

  2. 按排序顺序处理所有间隔。对于每个间隔,只需指定其值(无论之前有什么)。

  3. 运行所有间隔的查询以检查一切是否正确。

  4. 唯一的重要声明是:如果此算法没有找到解决方案,则没有解决方案。我不会发布正式证据,但这是关键的观察:

    1. 当我们按排序顺序处理它们时,我们必须为整个时间间隔分配一个新值。

    2. 我们不会在其他地方分配新值(也就是说,我们无法意外地销毁另一个间隔的值)。