我有两个间隔序列。
第一个是固定的,不重叠的,所以类似于:
[1..10], [12..15], [23..56], [72..89], ...
第二个不是固定的,所以它只是间隔长度的有序列表:
[7, 2, 5, 26, ...]
手头的任务是:
很简单的例子:
[25..26], [58..68], [74..76], [78..86]
[10, 12]
最佳解决方案是将长度为10的区间放在[58..68]处,将长度为12的区间放在[74..86]处,这将导致数字25、26和77仅在一个列表中,而不在另一个列表中。
我想出的唯一一件似乎有点帮助的事情是,如果我按顺序排列间隔,我知道我已经创建了多少“惩罚”间隔,所以我有分数的上限,这意味着我有一个可接受的启发式,我可以进行A*搜索,而不是查看整个树。然而,数字的总范围从0到大约34M,所以我想要更好的东西。
任何帮助都会很热情!
好的,这里有一个经过深思熟虑的答案。它应该在多项式时间内工作,但是我没有费心检查索引是什么。很可能得到比这里概述的答案更好的索引。细节留给读者练习:-)我希望它不会太不清楚。
我将解决方案的分数定义为出现在两个区间列表中的整数数量。让f(i, m)是仅使用前i个区间长度可能获得的最高分,前提是您的区间都不超过m。对于固定i,函数f本质上是一个(非严格)从整数到整数有界子集的递增函数。因此:
这意味着可以使用有限的数据结构来表示f(i,m)的所有值(仍然考虑i的固定值)。
现在让F(i)是这个数据结构的值,代表F(i,m)的所有值。我声称,给定F(I),可以计算F(I 1)。要做到这一点,我们只需要为所有x回答以下问题:如果我将新的间隔设置为x,那么我能得到的最佳解决方案有多好?但我们知道这是什么-这只是f(i,x)我们在这段时间内得到的分数。
因此,如果n是第二个列表中的区间数,则最佳解的分数将为F(n)。
要真正找到解决方案,您可以从这一点开始反向工作。
你知道你能得到的最好分数是多少。说它是\u 0。然后将最后一个间隔放在尽可能左的位置,前提是它允许您为s\U 0评分。也就是说,求最小的m,使得f(n,m)=s\u 0;放置间隔,使其仅停留在m的边界内。
然后,让s_1是您需要从所有其他间隔中获得的分数,以便获得s_0。将下一个最后一个间隔尽可能放在最左边,前提是您仍然可以s_1得分。也就是说,找到最小的m,使得f(n, m)=s_1;并将间隔放置在m的界内。
等等
假设我有一个这样的范围列表 现在我想找到一个范围,比如。我的算法应该给我这个范围的所有范围。例如,这个的输出应该是 <代码>输出-[1,3]、[2,5]、[4,6]、[8,10] 我该如何着手解决这个问题? PS:我知道段树可能会有所帮助。我可以在其中构建树来存储间隔并查询位于间隔内的Point,但如何在给定间隔的情况下获取所有间隔。
您将获得两个间隔列表,
与其查询具有开始和结束日期的间隔列表,不如从列表中检索仅与搜索开始和结束日期重叠的所有间隔,最好的方法是: 使用整数示例,以整数间隔列表为例。在此列表中,以下是所有唯一的间隔集,其中每组中的每个间隔都相互重叠: 以下是DateInterval的类: 我将收到按开始时间排序的间隔列表,如下所示: (在这个示例列表中,开始日期和结束日期总是均匀地落在一小时上。但是,它们可以落在任何一秒上(或者毫秒)。
我正在使用一个数据集,其中包含与相结合的度量值,例如: 我试图检测和删除可能出现的潜在峰值,如度量值。 到目前为止,我发现了一些东西: > 这个数据集的时间间隔从15秒一直到25分钟,这使得它非常不均匀 峰的宽度无法事先确定 峰值高度与其他值明显偏离 时间步长的标准化只应在去除异常值后进行,因为它们会干扰结果 由于其他异常(例如,负值、平线),即使没有这些异常,也“不可能”使其变得均匀,因为峰值会
问题内容: 如何将大熊猫中的时间序列重新采样为每周从任意一天开始的每周频率?我看到有一个可选的关键字库,但它仅适用于少于一天的时间间隔。 问题答案: 您可以将锚定的偏移量传递给,以及它们涵盖此情况的其他选项。 例如,星期一的每周频率:
问题内容: 我正在使用python 2.7.3,并且尝试根据另一个列表的值顺序对字典列表进行排序。 IE浏览器: 根据listOne中值的顺序对listTwo进行排序,结果如下: 我最终需要输出此文本,因此为正确显示(以正确的顺序)所做的工作如下: 是否有某种lambda表达式可用于实现此目的?必须有一种更紧凑,更简单的方法来按我想要的顺序来获取它。 问题答案: 最简单的方法是使用来为您的词典列表