Pergunta

Parece que eu tenho o conceito, mas não posso parece começar a aplicação correcta. eI ter um cluster (um ArrayList) com múltiplos pontos, e eu quero calcular a distância média. Ex: Pontos em conjunto (A, B, C, D, E, F, ..., n), Distância AB, AC Distância, Distância AD, ... A distância A, N, Distância (B, C) (Distância B, D) ... Distância (B, N) ...

Obrigado antecipadamente.

Foi útil?

Solução

Você não quer dobrar contar qualquer segmento, para que o seu algoritmo deve ser um double loop for. O loop externo vai de A a M (você não precisa verificar N, porque não restará nada para ele se conectar), cada vez looping de curPoint a N, calcular cada distância. Você adiciona todas as distâncias, e dividir pelo número de pontos (n-1) ^ 2/2. Deve ser bastante simples.

Não existem algoritmos padrão para melhorar a este que eu estou ciente de, e isso não é um problema amplamente estudada. Eu acho que você poderia obter uma estimativa razoável bastante (se uma estimativa é útil) por amostragem distâncias de cada ponto a um punhado de outros. Mas isso é uma suposição.

(Depois de ver o seu exemplo de código) Aqui está outra tentativa:

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 o limite para o primeiro ciclo é diferente. Distância entre dois pontos é provavelmente sqrt((x1 - x2)^2 + (y1 -y2)^2).

Outras dicas

Obrigado por toda a ajuda, Às vezes, depois de explicar a questão em resposta fórum apenas pop-up para a sua mente. Isto é o que eu acabo fazendo.

Eu tenho um conjunto de ponto, e eu preciso calcular a distância média de pontos (pares) no cluster. Então, é isso que eu fiz. Estou certo de que alguém vai vir com uma resposta melhor se então por favor deixe uma mensagem. Desde já, obrigado.

/**
 * 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top