Tengo una colección de 10000 - 100000 esferas, y necesito encontrar las más alejadas.Algoritmo eficiente para encontrar las esferas más alejadas en la gran colección
Una forma simple de hacerlo es simplemente comparar todas las esferas entre sí y almacenar la mayor distancia, pero esto se siente como un verdadero recurso de un algoritmo.
las esferas se almacenan en la siguiente forma:
Sphere (float x, float y, float z, float radius);
El método de la esfera :: distanceTo (Esfera & s) devuelve la distancia entre los dos puntos centrales de las esferas.
Ejemplo:
Sphere *spheres;
float biggestDistance;
for (int i = 0; i < nOfSpheres; i++) {
for (int j = 0; j < nOfSpheres; j++) {
if (spheres[i].distanceTo(spheres[j]) > biggestDistance) {
biggestDistance = spheres[i].distanceTo(spheres[j]) > biggestDistance;
}
}
}
Lo que estoy buscando es un algoritmo que de alguna manera bucle a través de todas las posibles combinaciones de una manera más inteligente, si hay alguna.
El proyecto está escrito en C++ (que tiene que ser), por lo que las soluciones que solo funcionan en idiomas distintos de C/C++ son de menor interés.
¿Es la tarea? –
Solo para aclarar, quieres algo mejor que O (n^2) (que es malo). Hmmm ..... – Craig
¿DistanceTo() obedece la desigualdad del triángulo? ¿distanceTo() se centra al centro o de la superficie a la superficie? ¿Las esferas tienen coordenadas en un espacio vectorial? ¿Está en un espacio euclidiano o hay agujeros negros curvando la métrica? ¿De dónde sacaste todas esas esferas, de todos modos? ¿Hay algo interesante dentro de las esferas que se pueda vender en eBay, porque parece que tienes muchas? – Paul