Bạn được cung cấp một danh sách các điểm trên mặt phẳng, viết chương trình xuất mỗi điểm cùng với ba điểm khác gần nhất là cho nó. Ba điểm này được sắp xếp theo khoảng cách.Tìm ba điểm gần nhất mỗi điểm trên mặt phẳng 2D
Ví dụ, cho một tập hợp các điểm trong đó mỗi dòng có dạng: ID tọa độ x y phối hợp
1 0.0 0.0
2 10.1 -10.1
3 -12.2 12.2
4 38.3 38.3
5 79.99 179.99
chương trình của bạn nên đầu ra:
1 2,3,4
2 1,3,4
3 1,2,4
4 1,2,3
5 4,3,1
Đây là một câu hỏi phỏng vấn tôi tìm thấy trên Diễn đàn trực tuyến. Tôi có thể nghĩ ra một giải pháp O (n * n): tính toán khoảng cách của mỗi điểm đến mọi điểm khác. Trả về các điểm khoảng cách tối thiểu cho điểm này. Lặp lại quá trình cho các điểm khác
Câu hỏi của bạn là gì? Bạn đang tìm kiếm một giải pháp nhanh hơn 'O (N * N)'? – dasblinkenlight
Đây là một câu hỏi phỏng vấn khá tệ, đặc biệt nếu mục tiêu là đưa ra mã thực tế. Nó là tầm thường để có được một giải pháp làm việc (có phức tạp có thể được chấp nhận trong một số bối cảnh), như bạn đã làm, nhưng khá khó để cải thiện khi nó. Đặc biệt là nếu bạn không có đầu mối về các cấu trúc được sử dụng trong hình học tính toán. Dù sao, googling cho "gần nhất neighbo (u) r" nên cung cấp cho bạn rất nhiều con trỏ. Một khởi đầu tốt là [mục Wikipedia này] (http://en.wikipedia.org/wiki/Nearest_neighbor_search) –
@dasblinkenlight, không anh ta tìm thuật toán để chạy trong O (n^n). –