У меня есть коллекция из 10000 - 100000 сфер, и мне нужно найти самых дальних.
Один простой способ сделать это - просто сравнить все сферы друг с другом и сохранить самое большое расстояние, но это похоже на реальный ресурс свиньи алгоритма.
Сферы хранятся следующим образом:
Sphere (float x, float y, float z, float radius);
Метод Sphere:: distanceTo (Sphere & s) возвращает расстояние между двумя центральными точками сфер.
Пример:
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;
}
}
}
То, что я ищу, - это алгоритм, который каким-то образом перебирает все возможные комбинации умным способом, если таковой существует.
Проект написан на С++ (который он должен быть), поэтому любые решения, которые работают только на языках, отличных от C/С++, представляют меньший интерес.