可変数のセット (数nと呼びましょう) があり、それぞれに最大で m 個の要素がある場合、セットのすべてのペアのペアごとの交差を計算する最も効率的な方法は何ですか? これは、 n 個すべての集合の交点とは異なることに注意してください。
たとえば、次のセットがあるとします。
A={"a","b","c"}
B={"c","d","e"}
C={"a","c","e"}
私は見つけることができるようにしたい:
intersect_AB={"c"}
intersect_BC={"c", "e"}
intersect_AC={"a", "c"}
もう 1 つの許容される形式 (簡単にする場合) は、特定のセット内のアイテムの、同じアイテムを含むセットへのマップです。例えば:
intersections_C={"a": {"A", "C"},
"c": {"A", "B", "C"}
"e": {"B", "C"}}
その方法の 1 つは、 n 個すべてのセットの和集合の各値をそれが発生するセットのリストにマッピングする辞書を作成し、それらのすべての値を繰り返し処理してintersections_C
上記のようなリストを作成することであることはわかっていますが、nが増加し、セットのサイズが大きくなりすぎると、それがどのようにスケーリングするかはわかりません。
いくつかの追加の背景情報:
- 各セットはほぼ同じ長さですが、非常に大きい (すべてをメモリに格納するのが現実的な問題であり、必須ではありませんが、それを回避するアルゴリズムが望ましい)。
- 任意の 2 つのセット間の交点のサイズは、セット自体のサイズに比べて非常に小さい
- それが役に立てば、入力セットの順序付けについて必要なことは何でも想定できます。