1

听起来我明白了这个概念,但似乎无法正确实现。e我有一个包含多个点的集群(一个 ArrayList),我想计算平均距离。例如:集群中的点 (A, B, C, D, E, F, ... , n),距离 AB,距离 AC,距离 AD,... 距离 A,N,距离 (B,C) 距离 ( B,D)... 距离 (B,N)...

提前致谢。

4

2 回答 2

2

您不想重复计算任何段,因此您的算法应该是双 for 循环。外部循环从 A 到 M(您不需要检查 N,因为它没有任何东西可以连接),每次从 curPoint 循环到 N,计算每个距离。您将所有距离相加,然后除以点数 (n-1)^2/2。应该很简单。

据我所知,没有任何标准算法可以对此进行改进,这也不是一个广泛研究的问题。我猜你可以通过从每个点到其他几个点的距离进行采样来得到一个非常合理的估计(如果估计有用的话)。但这是一个猜测。

(在看到您的代码示例后)这是另一个尝试:

公共双 avgDistanceInCluster() {
    双totDistance = 0.0;
    for (int i = 0; i < bigCluster.length - 1; i++) {
        for (int j = i+1; j < bigCluster.length; j++) {
            totDistance += 距离(bigCluster[i], bigCluster[j]);
        }
    }
    返回 totDistance / (bigCluster.length * (bigCluster.length - 1)) / 2;
}

请注意,第一个循环的限制是不同的。两点之间的距离大概是sqrt((x1 - x2)^2 + (y1 -y2)^2)

于 2009-11-01T17:53:57.093 回答
0

感谢您的所有帮助,有时在论坛答案上解释了问题后,您的脑海中就会弹出。这就是我最终要做的。

我有一个点集群,我需要计算集群中点(对)的平均距离。所以,这就是我所做的。如果是这样,我相信有人会给出更好的答案,请留言。提前致谢。

/**
 * 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();
}
于 2009-11-01T21:48:42.653 回答