Algorithm 区间的覆盖并集
我正试图实现一个问题的解决方案,这个问题归结为区间覆盖。 通过谷歌搜索,我知道这通常是用贪婪的方法解决的,但我自己的第一个想法是使用广度优先搜索。我开始假设区间的并集是一个区间,并且所有区间都是闭合的。问题是: 给定k个闭区间,找到一个元素尽可能少的子集 可能的情况是,从原始集合开始的间隔中的每个点 在找到的子集的某个时间间隔内 我的想法是在一个图中工作,其中间隔是顶点和两个顶点 如果相应的间隔重叠,则形成无向边。在特殊情况下 如果并集是一个间隔,我可以选择包含终点和起点的节点 具有最大长度,然后在这些最小长度之间有一条路径是最佳解决方案。Algorithm 区间的覆盖并集,algorithm,indexing,Algorithm,Indexing,我正试图实现一个问题的解决方案,这个问题归结为区间覆盖。 通过谷歌搜索,我知道这通常是用贪婪的方法解决的,但我自己的第一个想法是使用广度优先搜索。我开始假设区间的并集是一个区间,并且所有区间都是闭合的。问题是: 给定k个闭区间,找到一个元素尽可能少的子集 可能的情况是,从原始集合开始的间隔中的每个点 在找到的子集的某个时间间隔内 我的想法是在一个图中工作,其中间隔是顶点和两个顶点 如果相应的间隔重叠,则形成无向边。在特殊情况下 如果并集是一个间隔,我可以选择包含终点和起点的节点 具有最大长度,然
我的问题是:如何高效地构建区间图,以避免查看每对区间。我尝试了不同的时间间隔排序方法,但似乎仍然无法摆脱二次时间。我认为在最坏的情况下,你无法摆脱二次时间。这是因为边的数量可能是二次的
但是这里不需要普通的最短路径算法(比如Dijkstra)。从第一个间隔开始(起点最低的间隔)。然后选择一个间隔,该间隔在该间隔之后开始,且其终点最高。重复以上步骤直到结束。据我所知,我回答这个问题是因为之前的条目回答不正确或不完整 有一种算法在O(N log N)上运行,其中N是闭合段的数量:
希望这有帮助 带有两个集合(开始/结束)且指针指向同一边缘的变体是否没有为您带来正确的性能?我希望我不必首先构建完整的图形。如果可以避免预构建,我认为广度优先的解决方案更简单,因为它更容易证明正确性。只有在被迫休息时才休息。以取一为条件,尽可能远。好吧,也许你可以写出证明?我认为贪婪不起作用,因为不管是省略的区间集还是取的区间集,都必须定义拟阵。我可以很容易地证明,省略的间隔集不是。贪婪可能会找到一个好的解决方案,但不是最优的。也许有人能计算出竞争力。