Tôi muốn sắp xếp nhiều vị trí (điểm tham chiếu) về khoảng cách của chúng từ vị trí hiện tại. Vị trí hiện tại là, tất nhiên, một mục tiêu di động, vì vậy đối với mọi cập nhật vị trí, việc tính toán lại khoảng cách cho mọi vị trí là cần thiết. Nhưng chỉ tính toán lại cho các vị trí cận kề sẽ đủ.Cách nhanh nhất để sắp xếp nhiều vị trí trên khoảng cách là gì?
Tôi hiện đang sử dụng dữ liệu lõi và lưu khoảng cách đến vị trí hiện tại làm thuộc tính trong bảng (nhưng chỉ cập nhật là khi nó được thay đổi) từ bên trong phương thức configureecell: atindexpath:. Loại tác phẩm đó, nhưng ứng dụng không phản hồi trong khi dữ liệu lõi tự động cập nhật tất cả các khoảng cách. Điều này làm việc cho 250 địa điểm, nhưng cho 5000 địa điểm bị treo. Tôi cần nó để làm việc cho 10.000 địa điểm, mặc dù tôi có lẽ chỉ cần 1000 địa điểm gần nhất.
Ý tưởng mà tôi chưa thử: Lưu trữ tất cả các khoảng cách trong một mảng trong bộ nhớ riêng biệt mà không có gì ngoài id hồ sơ và khoảng cách. Sau đó sắp xếp mảng trên khoảng cách. Vấn đề là sau đó tôi không thể sử dụng một FetchedResultsController vì không có trường sắp xếp trong cơ sở dữ liệu.
Lọc vị trí dựa trên vĩ độ và kinh độ của chúng bằng cách sử dụng vị từ. Sau đó, chỉ hiển thị các vị trí được lọc.
Thực hiện tính toán lại khoảng cách trong một chuỗi riêng biệt.
Không có ý tưởng nào có vẻ dễ dàng để chỉ dùng thử.
Bất kỳ ai có đề xuất, ý tưởng khác, biến thể về ý tưởng của tôi?
Đối với điều này tôi cần một "Trung tâm location". vì vậy tôi có thể xử lý tất cả các vị trí như các điểm trên bề mặt phẳng. Tôi nghĩ điều này phù hợp với 'sắp xếp trước' tất cả các vị trí, để các vị trí lân cận được sắp xếp trước gần đó. Và bây giờ tất cả các địa điểm của tôi sẽ ở châu Âu. Nó có thể là một phần của giải pháp. – Bjinse
Hilbert Curve chắc chắn là "cách" để làm điều đó, nhưng nếu sự hiểu biết của tôi về các đường cong đầy không gian là chính xác, bất kỳ đường cong làm đầy không gian sẽ làm (Peano đến tâm trí. Chọn một trong những bảo tồn địa phương mặc dù). Một điều cần xem xét là lưu trữ vị trí của bạn trong cây kd thích ứng để nhanh chóng loại bỏ các vị trí quá xa. –
Đối với kích thước thấp, kd-tree tốt hơn đường cong lấp đầy không gian. Đối với kích thước cao, nó chỉ tốt nếu N> = 2^D (N = số điểm, D = kích thước). Lý do là nếu bạn phân chia theo một chiều khác nhau cho mỗi cấp trong cây kd, nếu bạn có quá ít điểm, bạn sẽ có một điểm duy nhất trong mỗi chiếc lá trước khi bạn chia ra từng chiều. Điều này có nghĩa là cấu trúc cây bỏ qua các kích thước và chất lượng còn lại bị ảnh hưởng. –