Secara formal, misalkan s ( U , Q ) = { V | V ∈ U dan V ⊆ Q } di mana U , Q , dan V semua mewakili set, dan U , lebih khusus lagi, mewakili satu set set. Sebagai contoh, U mungkin merupakan satu set (set) bahan yang diperlukan untuk berbagai resep dalam buku masak dengan Q mewakili set bahan yang saya miliki V yang mewakili resep yang bisa saya buat dengan bahan-bahan itu. Kueri s ( U , Q) sesuai dengan pertanyaan "Apa yang bisa saya buat dengan bahan-bahan ini?"
Apa yang saya cari adalah representasi data yang mengindeks U sedemikian rupa sehingga mendukung kueri efisien s ( U , Q ) di mana Q dan semua anggota U umumnya akan kecil dibandingkan dengan persatuan semua anggota U . Selain itu, saya ingin dapat memperbarui U secara efisien (misalnya, menambah atau menghapus resep).
Saya tidak dapat membantu tetapi berpikir bahwa masalah ini harus dipahami dengan baik, tetapi saya belum dapat menemukan nama atau referensi untuk itu. Adakah yang tahu strategi untuk menyelesaikan ini secara efisien atau tempat di mana saya bisa membaca lebih banyak tentang itu?
Sejauh pemikiran tentang solusi, satu pikir saya punya adalah untuk membangun pohon keputusan untuk set U . Di setiap simpul di pohon, pertanyaan "apakah daftar bahan Anda mengandung x ?" akan ditanya dengan x yang dipilih untuk memaksimalkan jumlah anggota U yang dihilangkan oleh jawabannya. Ketika U diperbarui, pohon keputusan ini perlu diseimbangkan kembali untuk meminimalkan jumlah pertanyaan yang diperlukan untuk menemukan hasil yang benar. Pemikiran lain adalah merepresentasikan U dengan sesuatu seperti 'octree' boolean n- dimensional (di mana n adalah jumlah bahan-bahan unik).
Saya percaya bahwa "Resep apa yang bisa dibuat dengan bahan-bahan ini?" dapat dijawab dengan mengambil produk cartesian dari (set bahan yang diperlukan untuk) resep dalam buku resep dengan set bahan-bahan yang dimiliki seseorang dan menyaring pasangan yang dipesan untuk berpasangan di mana kedua elemen sama, tetapi ini bukan solusi efisien, dan yang saya tanyakan adalah bagaimana mengoptimalkan operasi semacam ini; bagaimana seseorang menulis ini dalam SQL sehingga akan efisien dan apa yang dilakukan SQL yang membuatnya menjadi efisien?
Walaupun saya menggunakan ilustrasi buku resep masakan dan satu set bahan, saya mengantisipasi bahwa jumlah 'resep' dan jumlah 'bahan' akan sangat besar (masing-masing hingga ratusan ribu), meskipun jumlah bahan dalam resep yang diberikan dan jumlah bahan dalam set bahan tertentu akan relatif kecil (mungkin sekitar 10-50 untuk 'resep' yang khas dan sekitar 100 untuk 'set bahan' yang khas). Selain itu, operasi yang paling umum akan query s ( U , Q ), jadi harus paling optimal. Ini juga berarti bahwa algoritma brute force yang membutuhkan memeriksa setiap resep atau beroperasi pada setiap bahan akan lambat dengan sendirinya. Dengan caching yang pintar,