我有一个时间间隔,如下所示:
[5,10]
我有更多的时间点列表,长度不同,例如:
t1=[3,6,9,10]
t2=[2,4,5,6,10]
..
t1 [3,6]
是第一个区间,[6,9]
是第二个区间,以此类推。
t2
和其他列表也是同样的情况。
现在我需要保存与第一个时间间隔相交的列表和特定时间间隔。例如,在t1
中,我有[3,6]
与[5,10], [6,9]
相交,等等。
我已经制定了一个算法,但我需要处理更多的数据并且需要快速算法。例如,如果我处理300.000个列表,每个列表有200个时间点,那么我的算法在5-10秒内可以正常运行。但是如果时间点有10.000个或更多,则算法非常慢。
我的算法如下:
First time interval <- [t1,t2]
For each list
For each time interval [s1,s2] in list
if(s1>= t1 && s2 <= t2)
{
saveIntervall()
}
else if (s1<= t2 && s2 > t2)
{
saveIntervall()
}
else if(s1 < t1 && s2 >= t1)
{
saveIntervall()
}
else if (s1 < t1 && s2 > t2)
{
saveIntervall()
}
编辑1:是的,我有一个有序列表。
编辑2:我还有另一个问题,当我找到交集时,我需要计算一个介于0和1之间的得分,表示交集的大小。 我使用以下代码:
double score = 0.0d;
if(s1>= t1 && s2 <= t2)
{
score = (s2-s1) / (t2-t1);
}
else if(t2 >= s2 && t1 > s1)
{
score = (s2-t1) / (t2-t1);
}
else if(t2 < s2 && t1 <= s1)
{
score = (t2-s1) / (t2-t1);
}
else
{
score = 1;
}
我也可以加快速度吗?
t1
看起来只是一对区间,但我不明白t2
如何映射到区间。 - dimo414