距离矩阵实现

时间:2016-04-06 14:45:16

标签: java arrays hashmap

我有两个列表对象:A = {o1,o2,o3,... on},B = {p1,p2,p3,... pm}(m,n已定义)。

我想存储从A到B的对象之间的距离,例如:d(o1,p1),d(o1,p2)...,d(o1,pm),d(o2,p1),.. ..,d(上,下午)。

我使用一个n行×m列的矩阵来存储这些距离,从o1到on的行和从p1到pm的行的列

但问题是我想实现这样的功能:

public double GetDistance (object obj1, object obj2) 

例如,如果我调用GetDistance(o1,p4),它将返回像tis这样的值:DistanceMatrix [0] [3] = 0.6。

那么我们如何在这种情况下实现为了从两个对象o1,p4我们可以参考矩阵中相应的行和列是0,3(如果我必须使用矩阵来存储距离)。 / p>

1 个答案:

答案 0 :(得分:1)

您可以使用HashMap<object, Integer> pMap and oMap,其中键是对象,值是列或行的索引:

Object[] A = //{o1, o2, o3, o4, ... on};
Object[] B = //{p1, p2, p3, p4, ... pm};
HashMap<Object, Integer> oMap = new HashMap<Object, Integer>();
HashMap<Object, Integer> pMap = new HashMap<Object, Integer>();

for(int i = 0 ; i < A.length ; i++) {
    Object o = A[i];
    oMap.add(o, i);
}

for(int i = 0 ; i < B.length ; i++) {
    Object p = B[i];
    pMap.add(p, i);
}  

现在您可以构建距离矩阵,并使用以下命令访问值:

public double GetDistance (object obj1, object obj2) {
    //double[][] d = distanceMatrix;
    return d[oMap.get(objt1)][pMap.get(objt2)];
}