N 個のアイテムが M 個の異なるセットにグループ化されている場合、要素がどのセットに属しているかを見つけるための適切なデータ構造は何ですか? たとえば、セットが {A,B} 、 {C,D,E}、{F,G} の場合、「D」を指定してセットを見つけるにはどうすればよいですか? セットはハッシュ セットであるため、セット内の含むクエリは O(1) です。
セットのリストにセットがあるだけの場合、
[{A,B}, {C,D,E}, {F,G}]
リスト内の各セットにアイテムが含まれているかどうかを尋ねるだけで、ルックアップを取得できます。これは実装が簡単で、実行時間は (セット数で) 線形です。
より高速なアプローチは、すべてのセットをハッシュ テーブルに格納し、各セットのすべてのアイテムをキーにします。あれは:
[A -> {A, B},
B -> {A, B},
C -> {C, D, E},
D -> {C, D, E},
E -> {C, D, E},
F -> {F, G},
G -> {F, G}]
この構造により、正しいセットを O(1) 時間で取得できますが、非効率的で醜く感じられます。正しいセットの O(1) ルックアップを可能にする、より優れたデータ構造はありますか? 一種のブルームフィルターのようにハッシュを組み合わせてルックアップキーを作るべきでしょうか? 他のアイデア?