我有一组重叠的区间,我必须从相应的区间中选择一个元素,这样当它们被分组时,选择中有最小的间隙。
通过分组我的意思是连续的元素被分组。如果元素的其他区间没有连续的元素,则将其视为具有一个元素的组
通过最小化差距,我的意思是,我们减少了这些群体的数量并尝试形成更大的群体
我看到间隔树,并认为可能有所帮助,但不知道如何使用它为我的利益
请告诉我应该采取什么方法来解决问题。
示例:
间隔(包括边界)
[1,2]
[2,4]
[3,7]
[6,11]
[9,11]
[5,11]
[10,14]
[13,14]
可能的解决方案
[1,2] ==> 2
[2,4] ==> 3
[3,7] ==> 4
[6,11] ==> 10
[9,11] ==> 9
[5,11] ==> 11
[10,14] ==> 12
[13,14] ==> 13
通过选择上述元素而形成的群组
2,3,4 and 9,10,11,12,13
所以只有一个差距4到9
答案 0 :(得分:5)
此问题首先在以下方面解决:
P上。巴蒂斯特。调度单元任务以最小化空闲数量 周期:离线动态功率的多项式时间算法 管理。在第17届年度ACM-SIAM研讨会论文集中 离散算法,第364-367页,佛罗里达州迈阿密, 2006。
本文表明存在动态编程多项式解。不幸的是,它落后于支付墙。
但是,还有paper:
调度以最小化间隙和功耗
作者:Erik D. Demaine,Mohammad Ghodsi,MohammadTaghi Hajiaghayi Amin S. Sayedi-Roshkhar,Morteza Zadimoghaddam
将问题扩展到多个处理器上的调度任务,并给出一个O(n ^ 7p ^ 5)解决方案,其中n是间隔数,p是处理器数。
在你的情况下p = 1,所以这给出了一个O(n ^ 7)解。
如果这个太慢,那么你也可以试试文章中描述的近似解决方案,试图使每个间隙尽可能大。