我有一个区间G,以及一组长度不同的非重叠子区间s1, s2, ..., sn。
G |--------------------------------------------------------------// //-----------|
s1 [---] s3 [------------------]
s2 [------] sn [--]
我正在寻找一种算法,将所有这些子区间取出并随机放置到G上,以使它们不重叠。如何最好地做到这一点?
最简单、最朴素的方法是为每个子区间随机选择起始位置,在放置所有区间后检查是否有重叠,并在有重叠时重新开始。如果子区间对G提供了稀疏覆盖,则可能会非常快,但随着密度的增加而变得越来越低效。
一个类似的想法是在放置每个子区间时检查是否有重叠。虽然效率方面也存在类似的问题。
有没有更聪明的方法来处理这个问题呢?
更新
澄清一些问题:
- 我希望随机分布的是子区间的间距。
- 均匀分布可能是这种情况下最合适的随机性概念。
- 这些是离散(整数)闭区间,而不是连续区间。