문제
개념을 얻은 것처럼 들리지만 구현을 정확하게하는 것 같습니다. EI에는 여러 지점이있는 클러스터 (Arraylist)가 있으며 AVG 거리를 계산하려고합니다. 예 : 클러스터의 점 (a, b, c, d, e, e, f, n), 거리 AB, 거리 AC, 거리 AD, 거리 A, N, 거리 (B, C) 거리 ( b, d) ... 거리 (b, n) ...
미리 감사드립니다.
해결책
세그먼트를 두 배로 계산하고 싶지 않으므로 알고리즘은 루프의 두 배가되어야합니다. 외부 루프는 a에서 m으로 이동합니다 (연결할 것이 없기 때문에 N을 확인할 필요가 없습니다). 각 거리를 계산하면서 매번 쿠 포인트에서 N으로 반복됩니다. 모든 거리를 추가하고 점수 (N-1)^2/2로 나눕니다. 매우 간단해야합니다.
내가 알고있는이를 개선하기위한 표준 알고리즘은 없으며, 이는 널리 연구 된 문제가 아닙니다. 각 지점에서 소수의 다른 지점으로 거리를 샘플링하여 꽤 합리적인 추정치 (추정치가 유용한 경우)를 얻을 수 있다고 생각합니다. 그러나 그것은 추측입니다.
(코드 예제를 본 후) 다음은 다음과 같습니다.
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; }
첫 번째 루프의 한계는 다릅니다. 두 지점 사이의 거리는 아마도일 것입니다 sqrt((x1 - x2)^2 + (y1 -y2)^2)
.
다른 팁
모든 도움에 감사드립니다. 때로는 포럼 답변에 대한 질문을 설명한 후에도 마음에 팝업을하십시오. 이것이 제가 결국하는 일입니다.
포인트 클러스터가 있으며 클러스터의 AVG 거리 (쌍)를 계산해야합니다. 그래서 이것이 내가 한 일입니다. 나는 누군가가 더 나은 대답을 가지고 올 것이라고 확신합니다. 그렇다면 메모를 떨어 뜨리십시오. 미리 감사드립니다.
/**
* 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();
}