Tôi có một bộ sưu tập 10000 - 100000 hình cầu và tôi cần phải tìm ra những khoảng cách xa nhất.Thuật toán hiệu quả để tìm các hình cầu cách xa nhau nhất trong bộ sưu tập lớn
Một cách đơn giản để làm điều này là chỉ cần so sánh tất cả các hình cầu với nhau và lưu trữ khoảng cách lớn nhất, nhưng điều này giống như một con heo tài nguyên thực sự của một thuật toán.
Các Sphere được lưu trữ trong các cách sau:
Sphere (float x, float y, float z, float radius);
Phương pháp này Sphere :: distanceTo (Sphere & s) trả về khoảng cách giữa hai điểm trung tâm của vũ trụ.
Ví dụ:
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;
}
}
}
Những gì tôi đang tìm kiếm là một thuật toán nào đó vòng qua tất cả các kết hợp có thể theo một cách thông minh hơn, nếu có bất kỳ.
Dự án được viết bằng C++ (phải có), vì vậy mọi giải pháp chỉ hoạt động bằng các ngôn ngữ khác với C/C++ ít được quan tâm hơn.
Bài tập về nhà phải không? –
Chỉ cần làm rõ, bạn muốn cái gì đó là tốt hơn so với O (n^2) (đó là xấu). Hmmm ..... – Craig
Liệu distanceTo() có tuân theo sự bất bình đẳng tam giác không? là distanceTo() trung tâm đến trung tâm hoặc bề mặt để bề mặt? Các quả cầu có tọa độ trong không gian vectơ không? Là nó trong một không gian euclide hoặc có lỗ đen xung quanh cong các số liệu? Bạn đã lấy tất cả những quả cầu đó ở đâu? Có gì thú vị bên trong các lĩnh vực có thể được bán trên eBay, bởi vì bạn dường như có rất nhiều trong số họ? – Paul