2016-04-06 17 views
0

A = {o1、o2、o3、... on}、B = {p1、p2、p3、... pm}(m、nが定義されています) 。距離行列の実装

D(o1、p1)、d(o1、p2)...、d(o1、pm)、d(o2、p1)、...のように、AからBまでのオブジェクト間の距離を保存します。 ...、d(on、pm)。

私はO1から注文行でこれらの距離を保存するためにn行のXM列の行列を使用するのと列午後

にP1から命じしかし、問題は、私はそのような機能を実装したいということですします

たとえば、GetDistance(o1、p4)を呼び出すと、tis:DistanceMatrix [0] [3] = 0.6のような値が返されます。

したがって、この場合、2つのオブジェクトo1、p4から、行列の対応する行と列が0,3(距離を格納するために行列を使用する必要がある場合)を参照することができます。

+0

2つのリストにはどのような種類のオブジェクトがありますか?それらは任意のオブジェクトですか?あるいは、彼らはいつも別のクラスやインターフェースのインスタンスですか? –

+0

実際、obj1とobj2はユークリッドを使って距離を計算できる2つのベクトルです。 – nd07

答えて

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)]; 
} 
+0

私はLinkedHasMapを(キー、値)のペアを格納するために使用すると仮定すると、これよりもメモリコストが節約されると思いますか?しかし、どのようにパフォーマンス(タイミング)について、どのように良いですか? – nd07

関連する問題