整数のセットであるN
アイテムのセットがあります。それが順序付けられていると仮定して、 と呼びましょうI[1..N]
。セットが与えられた場合、との空でない共通部分を持つcandidate
サブセットを見つける必要があります。I
candidate
たとえば、次の場合:
I = [{1,2}, {2,3}, {4,5}]
次のように を定義しようとしていますvalid_items(items, candidate)
。
valid_items(I, {1}) == {1}
valid_items(I, {2}) == {1, 2}
valid_items(I, {3,4}) == {2, 3}
I
特定のセットと変数セットを最適化しようとしていcandidate
ます。現在、私はキャッシングでこれを行っていitems_containing[n] = {the sets which contain n}
ます。上記の例では、次のようになります。
items_containing = [{}, {1}, {1,2}, {2}, {3}, {3}]
つまり、0 はどの項目にも含まれず、1 は項目 1 に含まれ、2 は項目 1 と 2 に含まれ、2 は項目 2 に含まれ、3 は項目 2 に含まれ、4 と 5 は項目 3 に含まれます。
そうすれば、定義できますvalid_items(I, candidate) = union(items_containing[n] for n in candidate)
。
このユニオンの結果をキャッシュするための (妥当なサイズの) より効率的なデータ構造はありますか? スペースの明らかな例は2^N
受け入れられませんが、受け入れられるN
でしょN*log(N)
う。