这是算法大师们的一个问题:-)
设S是一组可能重叠的自然数的间隔,b是一个盒子大小。假设对于每个间隔,范围都严格小于b。
我希望找到大小b的最小间隔集(让我们称之为M),这样S中的所有间隔都包含在M的间隔中。
微不足道的例子:
S = {[1..4], [2..7], [3..5], [8..15], [9..13]}
b = 10
M = {[1..10], [8..18]}
// so ([1..4], [2..7], [3..5]) are inside [1..10] and ([8..15], [9..13]) are inside [8..18]
我认为贪婪的算法可能并不总是起作用
考虑下面的接口,它描述了一个连续的integer值范围。
public interface IRange {
int Minimum { get;}
int Maximum { get;}
IRange LargestOverlapRange(IEnumerable<IRange> ranges);
}
我正在寻找一个有效的算法,以找到最大的重叠范围,给出一个IRange对象的列表。下面的图表简要概述了这一想法。其中,顶部数字表示integer值,|-----|用min和max值表示IRange对象。我堆叠了IRange对象,这样解决方案就容易可视化了。
我正在寻找一种算法,在给定一组包含开始时间、结束时间、类型和id的项的情况下,它将返回适合在一起的所有项的集合(没有重叠的时间,并且所有类型都表示在该集中)。
S = [("8:00AM", "9:00AM", "Breakfast With Mindy", 234),
("11:40AM", "12:40PM", "Go to Gym", 219),
("12:00PM", "1:00PM", "Lunch With Steve"
超过您的程序所需的时间比预期的要长。预期时限:2.49秒
第一法典:
subarr = []
N = n+1 - k
for i in range(N):
S = arr[i:i+k]
subarr.append(max(S))
return subarr
第二法典:
l=[max(arr[:k])]
for i in range(k,n):
if l[-1]==arr[i-k]:
l.append(max(arr[i-k+1:i+1]))
elif l[-