当前位置:  开发笔记 > 人工智能 > 正文

查找具有子间隔的间隔的最小覆盖范围

如何解决《查找具有子间隔的间隔的最小覆盖范围》经验,为你挑选了1个好方法。

假设我有一个区间(a,b),以及多个子区间{(a i,b i)} i,其并集都是(a,b).是否有一种有效的方法来选择这些子区间的最小基数子集,这些子集仍然涵盖(a,b)?



1> Rafał Dowgir..:

从a或b开始的贪婪算法总是给出最优解.

证明:考虑集合S 一个覆盖所有的子区间.显然,其中一个必须属于最佳解决方案.如果我们用来自S a的子区间(a max,b max)替换它,其右端点b max在S a中最大(到达最右边),剩余的未覆盖间隔(b max,b)将是来自最优解的剩余间隔,因此它可以被覆盖而不是来自最优解的类似未覆盖间隔的子间隔.因此,由(a max,b max)构成的解决方案和剩余间隔的最优解(b max,b)也将是最佳的.

因此,只需从a开始并迭代地选择最右边的间隔(并覆盖前一个间隔的结束),重复直到你点击b.我相信如果将间隔存储在扩充间隔树中,则可以在log(n)中选择下一个间隔.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有