質問
は聞こえるが、カントは、実装が正しい取得するようです。 EIは、複数のポイントを持つクラスタ(ArrayListの)を持っている、と私は、平均距離を計算します。例:クラスタ内の点(A、B、C、D、E、F、...、n)は、距離AB、ACの距離、距離AD、...距離A、N、距離(B、C)の距離( B、D)...距離(B、N)...
事前に感謝します。
解決
あなたはあなたのアルゴリズムはループの2倍にする必要がありますので、任意のセグメントをカウント倍増する必要はありません。外側のループは(それは、接続するためには何も残っていないがありますので、あなたが、Nをチェックする必要はありません)Mに行くから、それぞれの距離を計算し、curPointからNまでループするたびに。あなたは^ 2/2ポイントの数(N-1)によって全ての距離、および除算を加えます。非常にシンプルでなければなりません。
があり私の知るこれに改善するための任意の標準アルゴリズムではありません、これは広く研究問題ではありません。 (見積りが有用である場合)、私は他の人の一握りに各点からの距離をサンプリングすることによって、あなたはかなり合理的な見積りを得ることができることを推測すると思います。しかし、それは推測だ。
(あなたのコードの例を見て)ここに、別の試みです:
public double avgDistanceInCluster() { double totDistance = 0.0; for (int i = 0; i < bigCluster.length - 1; i++) { for (int j = i+1; j < bigCluster.length; j++) { totDistance += distance(bigCluster[i], bigCluster[j]); } } return totDistance / (bigCluster.length * (bigCluster.length - 1)) / 2; }
最初のループの制限が異なることに注意してください。
2点間の距離は、おそらくsqrt((x1 - x2)^2 + (y1 -y2)^2)
されます。
他のヒント
おかげで、時々フォーラムの答えに質問を説明した後、ちょうどあなたの心にポップアップ表示します。これは私がやってしまうものです。
Iは、点のクラスタがあり、Iは、クラスタ内の点(対)の平均距離を計算する必要があります。だから、これは私がやったことです。私はノートをドロップしてください場合は、誰かが良い答えが付属しています確信しています。前もって感謝します。
/**
* Calculate avg distance between points in cluster
* @return
*/
public double avgDistanceInCluster() {
double avgDistance = 0.0;
Stack<Double> holder = new Stack<Double>();
for (int i = 0; i < cluster.size(); i++) {
System.out.println(cluster.get(i));
for (int j = i+1; j < cluster.size(); j++) {
avgDistance = (cluster.get(i) + cluster.get(j))/2;
holder.push(avgDistance);
}
}
Iterator<Double> iter = holder.iterator();
double avgClusterDist = 0;
while (iter.hasNext()) {
avgClusterDist =+ holder.pop();
System.out.println(avgClusterDist);
}
return avgClusterDist/cluster.size();
}