Frage

Klingt wie ich das Konzept bekam aber kippe scheint die Umsetzung korrekt zu erhalten. eI hat einen Cluster (ein Arraylist) mit mehreren Punkten, und ich mag avg Entfernung berechnen. Ex: Punkte im Cluster (A, B, C, D, E, F, ..., n), Entfernung AB, AC Entfernung, Entfernung AD, ... Abstand A, N, Entfernung (B, C) die Entfernung ( B, D) ... Entfernung (B, N) ...

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Sie wollen jedes Segment nicht doppelt zählen, so dass Ihr Algorithmus eine doppelte for-Schleife sein sollte. Die äußere Schleife geht von A bis M (Sie brauchen nicht N zu überprüfen, denn es wird nichts übrig bleiben, dafür zu verbinden), jedes Mal von curPoint bis N Looping, jede Entfernung zu berechnen. Sie fügen alle Abstände und Dividieren durch die Anzahl von Punkten (n-1) ^ 2/2. Sollte ziemlich einfach sein.

Es gibt keine Standard-Algorithmen für auf diese Verbesserung, die ich bin mir dessen bewusst, und das ist kein Problem umfassend untersucht. Ich würde vermuten, dass Sie eine ziemlich vernünftige Schätzung bekommen könnten (wenn eine Schätzung nützlich ist) durch einen Abstand von jedem Punkt auf eine Handvoll anderen probieren. Aber das ist eine Vermutung.

(nach dem Codebeispiel sehen) Hier ist ein weiterer Versuch:

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

Beachten Sie, dass die Grenze für die erste Schleife unterscheidet. Die Entfernung zwischen zwei Punkten ist wahrscheinlich sqrt((x1 - x2)^2 + (y1 -y2)^2).

Andere Tipps

Vielen Dank für all die Hilfe, manchmal nach der Frage im Forum Antwort erklären Popup nur in den Sinn. Dies ist, was ich am Ende tut.

Ich habe einen Cluster von Punkt, und ich brauche den avg Abstand der Punkte (Paare) in dem Cluster zu berechnen. Also, das ist, was ich tat. Ich bin sicher, dass jemand mit einer besseren Antwort wird kommen, wenn ja bitte eine Anmerkung fallen. Danke im Voraus.

/**
 * 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();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top