Tôi đang làm việc theo số my gEDA fork và muốn loại bỏ hệ thống dựa trên nền đơn giản hiện tại có lợi cho chỉ mục không gian thực .Tôi cần chỉ mục không gian trong C
Thuật toán hiệu quả tìm thấy điểm là không đủ: tôi cần tìm các đối tượng có mức độ khác 0. Hãy suy nghĩ về các đối tượng có hình chữ nhật bị ràng buộc, mà khá nhiều nắm bắt mức độ chi tiết tôi cần trong chỉ mục. Với hình chữ nhật tìm kiếm, tôi cần có khả năng tìm kiếm hiệu quả tất cả các đối tượng có hình chữ nhật giới hạn ở bên trong hoặc hình chữ nhật tìm kiếm.
Chỉ mục không thể chỉ đọc: gschem là một chương trình thu thập sơ đồ và toàn bộ điểm của nó là di chuyển mọi thứ xung quanh biểu đồ sơ đồ. Vì vậy, mọi thứ sẽ được a'changing. Vì vậy, trong khi tôi có thể đủ khả năng chèn đắt hơn một chút so với tìm kiếm, nó không thể là quá đắt hơn nhiều và việc xóa cũng phải vừa rẻ vừa hợp lý. Nhưng yêu cầu quan trọng nhất là hành vi tiệm cận: tìm kiếm phải là O (log n) nếu nó không thể là O (1). Chèn/xóa nên tốt nhất là O (log n), nhưng O (n) sẽ không sao. Tôi chắc chắn không muốn bất cứ điều gì> O (n) (cho mỗi hành động; rõ ràng là O (n log n) được mong đợi cho một hoạt động tất cả các đối tượng).
Tùy chọn của tôi là gì? Tôi không cảm thấy đủ thông minh để đánh giá the various options. Lý tưởng nhất là sẽ có một số thư viện C mà sẽ làm tất cả những thứ thông minh cho tôi, nhưng tôi sẽ thực hiện một cách máy móc một thuật toán tôi có thể hoặc có thể không hoàn toàn hiểu được nếu tôi có. gEDA sử dụng glib bằng cách này, nếu điều đó giúp đưa ra đề xuất.
Chú thích:
Chuẩn gEDA chia một sơ đồ thành một số cố định (hiện 100) của "gạch" mà phục vụ để tăng tốc độ tìm kiếm cho các đối tượng trong một hình chữ nhật bounding. Điều này rõ ràng là đủ tốt để làm cho hầu hết các sơ đồ đủ nhanh để tìm kiếm, nhưng cách nó được thực hiện gây ra các vấn đề khác: quá nhiều hàm đòi hỏi một con trỏ tới một đối tượng toàn cầu không thực tế. Hình dạng hình khối cũng được cố định: có thể đánh bại hệ thống ốp lát này hoàn toàn bằng cách kéo (và có thể phóng to) đến một vùng được bao phủ bởi chỉ một ô.
Câu trả lời hợp pháp sẽ là giữ các yếu tố của hệ thống ốp lát, nhưng để khắc phục các điểm yếu của nó: dạy nó kéo dài toàn bộ không gian và chia nhỏ khi cần thiết. Nhưng tôi muốn người khác thêm hai xu của họ trước khi tôi tự quyết định rằng đây là cách tốt nhất.
Ngoài ra, hãy xem http://www.boost.org/doc/libs/1_61_0/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/quick_start.html Và chúc bạn may mắn nếu dự án của bạn vẫn tiếp tục! –