我有一个区间 G ,以及一组不同长度的非重叠子区间 s 1 ,s 2 ,...,s n 。
G |--------------------------------------------------------------// //-----------|
s1 [---] s3 [------------------]
s2 [------] sn [--]
我正在寻找一种算法来获取所有这些子间隔,然后将它们再次放在 G 上,这样它们就不会重叠。这样做的最佳方式是什么?
最简单,最天真的方法是简单地随机选择每个子区间的起始位置,一旦放置所有区间就检查重叠,然后如果存在重叠则重新开始。如果子间隔提供 G 的稀疏覆盖,这可能会非常快,但随着密度的增加,效率会越来越低。
类似的想法是在放置每个子间隔时检查重叠。但是对效率的担忧也是如此。
有没有更聪明的方法来处理这个?
更新
澄清几点:
答案 0 :(得分:8)
我认为奥克奥的回答会给出差距的偏差分布(即第一个差距往往会比后来的差距更大。
但是,我认为一种非常相似的方法应该会更好:
答案 1 :(得分:3)
这样的东西?
{
"result" : [
{
"_id" : ObjectId("564f487c7d3c273d063cd21e"),
"matched" : true
},
{
"_id" : ObjectId("564f487c7d3c273d063cd21f"),
"matched" : true
},
{
"_id" : ObjectId("564f487c7d3c273d063cd220"),
"matched" : false
},
{
"_id" : ObjectId("564f487c7d3c273d063cd221"),
"matched" : false
}
],
"ok" : 1
}