distanza media tra i punti in un cluster
-
11-09-2019 - |
Domanda
Suoni come ho avuto l'idea, ma cant sembra ottenere l'attuazione corretta. eI hanno un cluster (un ArrayList) con più punti, e voglio calcolare la distanza media. Es: Punti in gruppo (A, B, C, D, E, F, ..., n), distanza AB, distanza AC, AD distanza, ... Distanza A, N, distanza (B, C) Distanza ( B, D) ... Distanza (B, N) ...
Grazie in anticipo.
Soluzione
Non si vuole raddoppiare contare qualsiasi segmento, così il vostro algoritmo dovrebbe essere un doppio ciclo for. Il ciclo esterno va da A a M (non c'è bisogno di controllare N, perché ci sarà più nulla per la connessione a), di volta in volta da loop curPoint a N, calcolando ogni distanza. È possibile aggiungere tutte le distanze, e dividere per il numero di punti (n-1) ^ 2/2. Dovrebbe essere abbastanza semplice.
Non ci sono algoritmi standard per migliorare su questo che io sappia, e questo non è un problema ampiamente studiato. Direi che si potrebbe ottenere una stima abbastanza ragionevole (se una stima è utile) campionando distanze da ogni punto ad una manciata di altri. Ma questa è una supposizione.
(Dopo aver visto il tuo esempio di codice) Ecco un altro tentativo:
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; }
Si noti che il limite per il primo ciclo è diverso.
Distanza tra due punti è probabilmente sqrt((x1 - x2)^2 + (y1 -y2)^2)
.
Altri suggerimenti
Grazie per tutto l'aiuto, a volte dopo aver spiegato la domanda sulla risposta forum appena comparsa per la vostra mente. Questo è quello che finisce per fare.
Ho un gruppo di punto, e ho bisogno di calcolare la distanza media di punti (coppie) nel cluster. Quindi, questo è quello che ho fatto. Sono sicuro che qualcuno sarà disponibile con una risposta migliore in caso affermativo si prega di rilasciare una nota. Grazie in anticipo.
/**
* 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();
}