Question

Sons comme je suis le concept mais ne peux pas semble obtenir la mise en œuvre correcte. ont un cluster ae (un ArrayList) avec de multiples points, et je veux calculer la distance moyenne. Ex: Points en grappe (A, B, C, D, E, F, ..., n), AB, AC Distance, Distance AD, ... Distance A, N, distance (B, C) Distance ( B, D) ... Distance (B, N) ...

Merci d'avance.

Était-ce utile?

La solution

Vous ne voulez pas compter deux fois un segment, de sorte que votre algorithme doit être une double boucle. La boucle externe va de A à M (vous n'avez pas besoin de vérifier N, parce qu'il n'y aura plus rien pour se connecter à), à chaque fois une boucle de curPoint à N, le calcul de chaque distance. Vous ajoutez toutes les distances, et diviser par le nombre de points (n-1) ^ 2/2. Devrait être assez simple.

Il n'y a pas des algorithmes standards pour l'amélioration de ce que je suis au courant, et ce n'est pas un problème largement étudié. Je suppose que vous pourriez obtenir une estimation assez raisonnable (si une estimation est utile) par des distances d'échantillonnage de chaque point à une poignée d'autres. Mais c'est une supposition.

(Après avoir vu votre exemple de code) Voici un autre essai:

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; 
}

Notez que la limite de la première boucle est différent. Distance entre deux points est probablement sqrt((x1 - x2)^2 + (y1 -y2)^2).

Autres conseils

Merci pour toute l'aide, parfois après avoir expliqué la question sur la réponse du forum juste Popup votre esprit. Voilà ce que je finis par faire.

J'ai un groupe de points, et je dois calculer la distance moyenne de points (paires) dans le cluster. Alors, voici ce que je faisais. Je suis sûr que quelqu'un va venir avec une meilleure réponse si oui s'il vous plaît laisser une note. Merci d'avance.

/**
 * 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();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top