Chính thức, hãy s ( U , Q ) = { V | V ∈ U và V ⊆ Q } trong đó U , Q và V đều đại diện cho các tập hợp và U , cụ thể hơn, đại diện cho một tập hợp các tập hợp. Ví dụ, U có thể là một tập hợp (bộ) nguyên liệu cần thiết cho các công thức nấu ăn khác nhau trong một cuốn sách nấu ăn với Q đại diện cho bộ nguyên liệu tôi có V đại diện cho một công thức tôi có thể làm với những thành phần đó. Các truy vấn s ( U , Q) tương ứng với câu hỏi "Tôi có thể làm gì với những thành phần này?"
Điều tôi đang tìm kiếm là một biểu diễn dữ liệu lập chỉ mục U theo cách nó hỗ trợ các truy vấn hiệu quả của s ( U , Q ) trong đó Q và tất cả các thành viên của U nói chung sẽ nhỏ so với liên minh của tất cả các thành viên của U . Ngoài ra, tôi muốn nó có thể cập nhật U một cách hiệu quả (ví dụ: thêm hoặc xóa công thức).
Tôi không thể không nghĩ rằng vấn đề này phải được hiểu rõ, nhưng tôi chưa thể tìm thấy tên hoặc tài liệu tham khảo cho nó. Có ai biết về một chiến lược để giải quyết vấn đề này một cách hiệu quả hay một nơi mà tôi có thể đọc thêm về nó không?
Theo như suy nghĩ về một giải pháp, ai nghĩ tôi đã có được để xây dựng một cây quyết định cho tập U . Tại mỗi nút trong cây, câu hỏi "danh sách thành phần của bạn có chứa x không?" sẽ được hỏi với x được chọn để tối đa hóa số lượng thành viên của U bị loại bởi câu trả lời. Khi U được cập nhật, cây quyết định này sẽ cần được cân bằng lại để giảm thiểu số lượng câu hỏi cần thiết để tìm ra kết quả chính xác. Một suy nghĩ là đại diện cho U với một cái gì đó giống như một n chiều boolean 'octree' (nơi n là số thành phần duy nhất).
Tôi tin rằng "Những công thức nào có thể được thực hiện với những thành phần này?" có thể được trả lời bằng cách lấy sản phẩm cartesian của (bộ nguyên liệu cần thiết cho) công thức nấu ăn trong sách nấu ăn với quyền hạn của các thành phần có và lọc các cặp theo thứ tự kết quả cho các cặp trong đó cả hai yếu tố đều bằng nhau, nhưng đây không phải là một giải pháp hiệu quả, và điều tôi đang hỏi là làm thế nào để tối ưu hóa loại hoạt động này; Làm thế nào một người sẽ soạn cái này trong SQL sao cho nó hiệu quả và SQL làm gì để cho phép nó hiệu quả?
Mặc dù tôi sử dụng hình minh họa của một cuốn sách dạy nấu ăn và một bộ nguyên liệu, tôi dự đoán rằng số lượng 'công thức nấu ăn' và số lượng 'nguyên liệu' sẽ rất lớn (lên đến hàng trăm ngàn mỗi nguyên liệu), mặc dù số lượng nguyên liệu trong một công thức nhất định và số lượng thành phần trong một bộ thành phần nhất định sẽ tương đối nhỏ (có thể khoảng 10-50 cho một 'công thức' điển hình và khoảng 100 cho một 'bộ thành phần' điển hình). Ngoài ra, hoạt động phổ biến nhất sẽ là truy vấn s ( U , Q ), vì vậy nó phải tối ưu nhất. Điều này cũng có nghĩa là một thuật toán vũ phu đòi hỏi phải kiểm tra mọi công thức hoặc vận hành trên mọi thành phần sẽ tự nó chậm một cách không mong muốn. Với bộ nhớ đệm thông minh,