一维轴对齐矩形长方体 (MBR) 的交集
Intersection of axis-aligned rectangular cuboids (MBR) in one dimension
目前我正在做时间序列索引算法的基准测试。由于大多数时候没有可用的参考实现,我必须编写自己的实现(全部在 Java 中)。目前,我在一篇名为 Indexing multi-dimensional time-series with support for multiple distance measures available here in PDF : http://hadjieleftheriou.com/papers/vldbj04-2.pdf
的论文的第 6.2 节有点卡住了
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) :
但是我不确定如何实现 "intersection of two MBRs in the time dimension" (Dim 1),因为我不确定时间维度中的交集实际上意味着什么。也不清楚 h_Q、l_Q、l_P、h_P 是什么意思,因为这个符号没有解释(我猜他们的意思是最高或最低值交叉点中的维度)。
如果有人能向我解释如何计算第一维中两个 MBR 的交集,并可能通过对符号的解释来启发我,我将不胜感激。谢谢!
好吧,你论文中的图 14 解释了时间交集。并且矩形是axis-aligned,因此在每个坐标上使用高和低是有意义的。
你看到的乘号不是叉积,只是一个普通的乘法,因为它的两边都是标量,而不是向量。
但是我必须同意第 14 页上的讨论相当模糊,但它们似乎告诉我们两种类型的交集(完整的和部分的),当它们有 t 下标时,表示交集的范数t坐标。
因此,您似乎可以分解时间交集以获得一个公式:
值得注意的是,可能counter-intuitively,当你的对象在时间平面上不相交时,它们的MINDIST被定义为0。
因此 pseudo-code ;
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);
}
注意论文中的绝对值是不必要的,因为我们只是检查了哪些值更大,因此我们知道我们只添加正数。
目前我正在做时间序列索引算法的基准测试。由于大多数时候没有可用的参考实现,我必须编写自己的实现(全部在 Java 中)。目前,我在一篇名为 Indexing multi-dimensional time-series with support for multiple distance measures available here in PDF : http://hadjieleftheriou.com/papers/vldbj04-2.pdf
的论文的第 6.2 节有点卡住了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) :
但是我不确定如何实现 "intersection of two MBRs in the time dimension" (Dim 1),因为我不确定时间维度中的交集实际上意味着什么。也不清楚 h_Q、l_Q、l_P、h_P 是什么意思,因为这个符号没有解释(我猜他们的意思是最高或最低值交叉点中的维度)。
如果有人能向我解释如何计算第一维中两个 MBR 的交集,并可能通过对符号的解释来启发我,我将不胜感激。谢谢!
好吧,你论文中的图 14 解释了时间交集。并且矩形是axis-aligned,因此在每个坐标上使用高和低是有意义的。
你看到的乘号不是叉积,只是一个普通的乘法,因为它的两边都是标量,而不是向量。
但是我必须同意第 14 页上的讨论相当模糊,但它们似乎告诉我们两种类型的交集(完整的和部分的),当它们有 t 下标时,表示交集的范数t坐标。
因此,您似乎可以分解时间交集以获得一个公式:
值得注意的是,可能counter-intuitively,当你的对象在时间平面上不相交时,它们的MINDIST被定义为0。
因此 pseudo-code ;
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);
}
注意论文中的绝对值是不必要的,因为我们只是检查了哪些值更大,因此我们知道我们只添加正数。