目前我正在对时间序列索引算法进行基准测试。由于大多数时候没有可用的参考实现,我必须编写自己的实现(全部使用Java)。目前,我在PDF格式的Indexing multi-dimensional time-series with support for multiple distance measures文章的第6.2节中稍稍陷入困境:http://hadjieleftheriou.com/papers/vldbj04-2.pdf
MBR(最小边界矩形)基本上是具有一些坐标和方向的矩形立方体。作为示例,P和Q是两个MBR,其中P.coord = {0,0,0}并且P.dir = {1,1,3}并且Q.coords = {0.5,0.5,1}并且Q.dir = {1,1,1}其中第一个条目代表时间维度。
现在我想计算Q和P之间的MINDIST(Q,P):
但是我不确定如何实现“时间维度中两个MBR的交集”(Dim 1),因为我不确定时间维度中的交集实际意味着什么。还不清楚h_Q,l_Q,l_P,h_P是什么意思,因为没有解释这个符号(我的猜测是它们意味着交叉点中维度的最高值或最低值)。
如果有人可以向我解释如何计算第一维中两个MBR的交集并且可能通过对符号的解释启发我,我将非常感激。谢谢!
答案 0 :(得分:0)
嗯,你的论文中的图14解释了时间的交集。并且矩形是轴对齐的,因此在每个坐标上使用高和低是有意义的。
你看到的乘法符号不是叉积,只是一个正常的乘法,因为它的两边都有一个标量,而不是矢量。
然而,我必须同意第14页的讨论相当模糊,但他们似乎告诉我们,两种类型的交叉点(完整的和部分的),当它们有下标时,意味着沿着交叉点的交叉点的范数。坐标。
因此,似乎你可以将时间交集因式分解得到一个公式:
值得注意的是,可能违反直觉,当你的物体在时间平面上相交时,他们的MINDIST被定义为0。
因此以下伪代码;
mindist(P, Q)
{
if( Q.coord[0] + Q.dir[0] < P.coord[0] ||
Q.coord[0] > P.coord[0] + P.dir[0] )
return 0;
time = min(Q.coord[0] + Q.dir[0], P.coord[0] + P.dir[0]) - max(Q.coord[0], P.coord[0]);
sum = 0;
for(d=1; d<D; ++d)
{
if( Q.coord[d] + Q.dir[d] < P.coord[d] )
x = Q.coord[d] + Q.dir[d] - P.coord[d];
else if( P.coord[d] + P.dir[d] < Q.coord[d] )
x = P.coord[d] + P.dir[d] - Q.coord[d];
else
x = 0;
sum += x*x;
}
return sqrt(time * sum);
}
请注意,论文中的绝对值是不必要的,因为我们只检查哪些值更大,因此我们知道我们只添加正数。