Vấn đềhiệu quả tìm tọa độ cặp gần nhất từ một bộ bằng Python
Hãy tưởng tượng tôi đang đứng trong sân bay. Với một cặp tọa độ địa lý, làm cách nào để xác định một cách hiệu quả sân bay nào tôi đang đứng?
Đầu vào
- Một phối hợp cặp
(x,y)
đại diện cho vị trí tôi đang đứng ở. - Một tập hợp các cặp tọa độ
[(a1,b1), (a2,b2)...]
trong đó mỗi cặp tọa độ đại diện cho một sân bay.
mong muốn Output
Một phối hợp cặp (a,b)
từ tập các sân bay phối hợp cặp đại diện cho các sân bay gần nhất với điểm (x,y)
.
không hiệu quả Giải pháp
Đây là nỗ lực không hiệu quả của tôi tại giải quyết vấn đề này. Nó rõ ràng là tuyến tính trong chiều dài của tập hợp các sân bay.
shortest_distance = None
shortest_distance_coordinates = None
point = (50.776435, -0.146834)
for airport in airports:
distance = compute_distance(point, airport)
if distance < shortest_distance or shortest_distance is None:
shortest_distance = distance
shortest_distance_coordinates = airport
Các Câu hỏi
Làm thế nào giải pháp này có thể được cải thiện? Điều này có thể liên quan đến một số cách lọc trước danh sách các sân bay dựa trên tọa độ của vị trí chúng tôi hiện đang đứng hoặc sắp xếp chúng theo thứ tự nhất định trước đó.
Nó không thể được cải thiện đáng kể mà không cần bất kỳ bổ sung kiến thức của vấn đề (ví dụ: một thực tế rằng có ít nhất một sân bay trong langtitude cùng thể đã trợ giúp). Để lọc các sân bay, bạn sẽ vẫn cần phải xem xét từng loại, vì vậy sự phức tạp của bạn sẽ ở lại O (n) (trừ khi, tất nhiên, bạn đang làm một điều gì đó phức tạp trong 'compute_distance()', mà tôi nghi ngờ vì bạn có lẽ chỉ cần làm khoảng cách Haversine) –
Xem https://en.wikipedia.org/wiki/Nearest_neighbor_search để biết tổng quan về các thuật toán và cấu trúc dữ liệu. – NPE
@DmitryTorba Cảm ơn bạn đã bình luận. Điều này có nhất thiết phải không? Nếu chúng ta sắp xếp danh sách trước theo một cách cụ thể thì sao? – Kieran