轨迹距离衡量-LCSS
Paper pdf link: Discovering Similar Multidimensional Trajectories
基本思想
基于公共最长子序列,我们知道对于两个序列A,B 求其最长公共子序列的dp矩阵推导式如下:
dp(i, j) = 0 if |A|=0 or |B|=0
dp(i,j) = 1+dp(i-1,j-1) if A[i] == B[j]
dp(i,j) = max(dp(i-1,j), dp(i,j-1)) otherwise
我们可以将该思想应用到轨迹序列的距离衡量中:
根据该推导式,我们就可以设计计算函数了。LCSS越大,说明公共字段越多,相似的轨迹点越多,轨迹相似度越大。
Java实现LCSS
public static int[][] LCSS(float[][] traj1, float[][] traj2, int k, float epsilon)
{
int m = traj1.length;
int n = traj2.length;
int[][] dp = new int[m+1][n+1];
// 初始化第一行第一列,序列为空的情况
for(int i=0;i<m;i++)
{
dp[i][0] = 0;
}
for(int j=0;j<n;j++)
{
dp[0][j] = 0;
}
for(int i=1;i<m;i++)
{
for(int j=1;j<n;j++)
{
if(Math.abs(traj1[i][0]-traj2[j][0])<epsilon &&
Math.abs(traj1[i][1]-traj2[j][1])<epsilon &&
Math.abs(i-j)<=k) {
dp[i][j] = dp[i-1][j-1]+1;
}else {
dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]);
}
}
}
return dp;
}