听起来好像我有这个概念,但不能似乎得到执行正确的。 EI具有多个点的簇(一个ArrayList),并且我想要计算平均距离。例如:在群集点(A,B,C,d,E,F,...,n)时,距离AB,AC的距离,距离AD,...的距离A,N,距离(B,C)的距离( B,d)...距离(B,N)...

预先感谢。

有帮助吗?

解决方案

您不想重复计算任何部分,所以你的算法应该是循环双。外环从前进到M(你不需要检查N,因为在那里我有什么留给它来连接),每次循环从curPoint 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)

其他提示

感谢所有帮助,有时解释在论坛上回答问题后,只弹出你的头脑。这是我最后做。

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

/**
 * 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