문제

개념을 얻은 것처럼 들리지만 구현을 정확하게하는 것 같습니다. 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();
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top