Tôi đang cố triển khai một phiên bản đơn giản hơn của thuật toán này nhưng hoạt động tốt hơn thuật toán bậc hai. Ý tưởng của tôi về cơ bản là sắp xếp các điểm theo tọa độ x duy nhất và cố gắng giải quyết nó từ đó. Một khi tôi sắp xếp mảng của tôi điểm bằng x phối hợp, tôi muốn lặp qua mảng và về cơ bản bỏ qua các điểm có khoảng cách lớn hơn hai điểm đầu tiên tôi lấy.Thuật toán cặp điểm gần nhất
Ví dụ: currentminDist = x;
Nếu hai điểm mà tôi đang xem có khoảng cách> x (chỉ bằng tọa độ x của nó), tôi bỏ qua điểm và di chuyển qua nó trong mảng.
Tôi có ý tưởng xuống, nhưng tôi là loại bị mắc kẹt về cách thực sự thực hiện điều này (đặc biệt là phần điều kiện). Tôi có một hàm trả về khoảng cách giữa hai điểm dựa trên tọa độ x của chúng.
Tôi nhầm lẫn về cách viết các điều kiện cho vòng lặp của mình vì tôi muốn bỏ qua một điểm nếu khoảng cách xảy ra quá xa và vẫn điền vào mảng của tôi sẽ chứa các câu trả lời cho các điểm gần nhất cho mỗi i (tôi là điểm hiện tại tôi đang xem).
Mọi mẹo hoặc chỉ đường sẽ được đánh giá cao. Tôi không hiểu nhiều về các thuật toán mã hóa nên nó khá bực mình.
Dưới đây là một phần của mã của tôi:
for (i = 0; i < numofmypoints; i++)
{
for (int j = i + 1; (j < numpofmypoints) && ((inputpoints[j].x - inputpoints[i].x) < currbest); j++)
{
currdist = Auxilary.distbyX(inputpoints[i],inputpoints[j]);
if (currdist < bestdist)
{
closest[i] = j;
bestdist = currdist;
}
}
}
distbyX là chức năng của tôi mà chỉ cần trả khoảng cách giữa hai điểm.
Cảm ơn!
@ Paul: làm bạn cần phải làm điều này thường xuyên không? Sẽ không lưu trữ điểm của bạn trong một "quadtree" giúp đỡ? http://en.wikipedia.org/wiki/Quadtree – TacticalCoder
Lưu ý rằng bạn có thể nhận được hiệu suất tốt hơn so với thuật toán ngây thơ, nhưng bạn vẫn sẽ là 'O (n^2)' mặc dù. – ARRG
Tại sao có 'currbest' và' bestdist' trong mã của bạn? Sự khác biệt là gì? – Ishtar