Tôi muốn triển khai một số cấu trúc dữ liệu lập chỉ mục không gian cho số MKAnnotations
của mình. Hiện tại nó rất chậm khi tôi cố gắng lọc chúng dựa trên tiêu chí khoảng cách (3-4 nghìn vị trí, hiện tại cực kỳ chậm với một đơn giản là đôi for
...).Tôi nên sử dụng thuật toán lập chỉ mục không gian nào?
Tôi muốn tạo các cụm MKAnnotations
, để quyết định xem cụm này có gần với cụm khác không. Ngoài ra, các vị trí này nằm trong một trật tự phần nào (sáng tạo) và một chức năng "trước"/"tiếp theo" sẽ là cần thiết để "nhảy" giữa (đây không phải là điều bắt buộc). Tôi đã đọc về các cấu trúc kd-tree
và r-tree
và cả hai dường như đáp ứng tùy chọn lọc/phân cụm nhanh/khoảng cách lân cận để lọc/phân nhóm, nhưng tôi không chắc chắn lựa chọn nào tốt nhất cho tôi hoặc nếu có các tùy chọn khác. Tôi nên sử dụng thuật toán/cấu trúc dữ liệu nào?
Cập nhật: Tôi lưu trữ các vị trí này trong cơ sở dữ liệu lõi dữ liệu, chúng đại diện cho một đường dẫn. Khi bản đồ được mở, chúng được lấy vào một mảng và sau đó tôi chỉ sử dụng mảng đó để tính toán khoảng cách và tạo chú thích. Khi người dùng di chuyển/phóng to bản đồ, tôi lặp lại chúng và quyết định những gì cần phải được thay đổi trên bản đồ, vì vậy nó là kinda tĩnh toàn bộ công cụ. Như tôi đã hiểu, nếu tôi muốn sử dụng một cái cây, tôi có thể lưu trữ các vị trí đó và khi zoom/di chuyển xảy ra, tôi chỉ tìm kiếm thông qua nó và có được những cái ở khu vực mới. Điều này có đúng không?
Ngay cả trong trường hợp động, khi tôi có thể thêm vị trí mới vào mảng này, nó sẽ là một lần chèn và nó hiếm khi xảy ra.
Xem các chỉnh sửa mẫu sử dụng của tôi ở trên. Tôi không muốn sử dụng băm giống như lưới, họ không nhìn tốt và cho trường hợp của tôi họ không phù hợp. Tôi sẽ kiểm tra cây R * ngay bây giờ. – Templar
Nếu dữ liệu của bạn là tĩnh, tải hàng loạt một R-tree (không có sự khác biệt giữa R nạp hàng loạt và R *, vì chúng chỉ khác nhau khi chèn) cũng là một tùy chọn, hãy thử sắp xếp-lát-đệ quy. –
Lưu ý rằng với băm giống như lưới tôi chỉ đề cập đến cấu trúc dữ liệu của bạn, KHÔNG phải là biểu diễn trực quan cho người dùng. Bạn chỉ cần * nhóm * đối tượng cho tổ chức nếu chúng rơi vào cùng một ô lưới. Trên màn hình, bạn chỉ quét qua các ô mà bạn cần hiển thị. Một cái cây hầu như không thể làm tốt hơn. –