Pregunta

Sonidos como si tuviera el concepto, pero no puede parece conseguir la correcta implementación. eI tiene un clúster (un ArrayList) con múltiples puntos, y quiero calcular la distancia promedio. Ex: Puntos en el grupo (A, B, C, D, E, F, ..., n), distancia AB, Distancia de corriente alterna, la distancia AD, ... Distancia A, n, la distancia (B, C) Distancia ( B, D) ... Distancia (B, N) ...

Gracias de antemano.

¿Fue útil?

Solución

No quiere doblar cuenta cualquier segmento, por lo que su algoritmo debe ser un doble bucle. El bucle exterior va de A a H (que no es necesario para comprobar N, porque no quedará nada para que se conecte a), cada vez que un bucle de curPoint a N, calculando cada distancia. Agrega todas las distancias, y se dividen por el número de puntos (n-1) ^ 2/2. Debe ser bastante simple.

No hay algoritmos estándar para mejorar en esto que yo sepa, y esto no es un problema ampliamente estudiada. Supongo que se podría obtener una estimación bastante razonable (si es una estimación útil) mediante el muestreo de distancias de cada punto a un puñado de otros. Pero eso es una suposición.

(Después de visitar al ejemplo de código) Aquí hay otro intento:

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

Observe que el límite para el primer bucle es diferente. Distancia entre dos puntos es probablemente sqrt((x1 - x2)^2 + (y1 -y2)^2).

Otros consejos

Gracias por toda la ayuda, a veces después de explicar la cuestión en respuesta simplemente foro emergente para su mente. Esto es lo que termino haciendo.

I tiene un clúster de punto, y necesito para calcular la distancia promedio de los puntos (pares) en el cluster. Por lo tanto, esto es lo que hice. Estoy seguro de que alguien vendrá con una mejor respuesta si así que por favor deje una nota. Gracias por adelantado.

/**
 * 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();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top