공식적으로 s ( U , Q ) = { V | V ∈ U 및 V ⊆ Q } 여기서 U , Q 및 V는 모두 세트를 나타내고, U 는보다 구체적으로 세트 세트를 나타냅니다. 예를 들어, U 는 요리 책에서 다양한 요리법에 필요한 (세트 세트) 재료 세트 일 수 있습니다. Q 는 재료 세트를 나타내는 V 를 가지고 있습니다 . 쿼리 s ( U , Q)는 "이 재료로 무엇을 만들 수 있습니까?"라는 질문에 해당합니다.
내가 찾고 인덱스하는 데이터 표현 U 등의 방법으로 그것을 효율적으로 쿼리를 지원하는 S ( U , Q ) Q 와의 모든 구성원 U는 일반적으로 구성원 모두의 조합에 비해 작은 것 U를 . 또한 U 를 효율적으로 업데이트 (예 : 레시피 추가 또는 제거) 할 수 있기를 바랍니다 .
나는이 문제를 잘 이해해야한다고 생각할 수는 없지만 이름이나 참조를 찾을 수 없었습니다. 이것을 효율적으로 해결하기위한 전략이나 그것에 대해 더 많이 읽을 수있는 곳을 아는 사람이 있습니까?
솔루션에 대해 생각하는 한, 세트 U에 대한 의사 결정 트리를 작성해야한다고 생각했습니다 . 트리의 각 노드에서 "성분 목록에 x가 포함되어 있습니까?"라는 질문이 있습니다. 답에 의해 제거되는 U 의 구성원 수를 최대화하기 위해 x를 선택 하도록 요청 합니다. 으로 U가 업데이트 될 때,이 의사 결정 나무는 다시 균형 올바른 결과를 찾기 위해 필요한 질문의 수를 최소화 할 필요가있다. 또 다른 생각은 U 를 n 차원 부울 'octree'(여기서 n 은 고유 성분의 수) 와 같은 것으로 표현 하는 것 입니다.
"이 재료로 어떤 요리법을 만들 수 있습니까?" 요리 책에있는 요리법에있는 (필요한 재료 세트) 레시피의 데카르트 곱을 가지고있는 재료의 파워 세트로 가져 와서 두 요소가 동일한 쌍에 대해 결과적인 순서 쌍을 필터링함으로써 대답 할 수 있습니다. 효율적인 솔루션과 내가 요구하는 것은 이런 종류의 작업을 최적화하는 방법입니다. 어떻게 SQL에서 효율적으로 작성하고 효율적으로 수행 할 수 있습니까?
요리법 요리법과 재료 세트의 삽화를 사용하지만 재료의 수는 많지만 '레시피'와 '성분'의 수는 매우 클 것으로 예상됩니다. 주어진 레시피에서 주어진 성분 세트의 성분 수는 상대적으로 작을 것입니다 (아마도 전형적인 '레시피'의 경우 약 10-50, 전형적인 '성분 성분'의 경우 약 100). 또한, 가장 일반적인 작업은 쿼리 될 것 S ( U , Q를 가 최적해야하므로). 이것은 또한 모든 레시피를 확인하거나 모든 성분에 대해 작동해야하는 무차별 강제 알고리즘이 바람직하지 않게 느리다는 것을 의미합니다. 영리한 캐싱으로