web-dev-qa-db-ja.com

セットのリストから一般的なサブセットを見つける

次のように定義されたセットのリストがあるとします(この例では3セット)。

A = [1, 2, 3, 4, 5]
B = [4, 5, 6, 7, 8]
C = [1, 2, 3, 4, 5, 6, 7, 8]

セットで定義されている要素の総数:18

セットの定義を単純化するために、セットに共通するサブセットを見つけたいと思います。

この例では、[4, 5]はすべてのセットに共通です。すべてのセットの間に intersection を適用することで、これを簡単に見つけることができます。次に、次のようにセットの定義を書き換えます。

A, B, C = [4, 5]
A = [1, 2, 3]
B = [6, 7, 8]
C = [1, 2, 3, 6, 7, 8]

要素の総数:14

ただし、これはさらに改善できます。

A, C = [1, 2, 3]
B, C = [6, 7, 8]
A, B, C = [4, 5]

要素の総数:8

私の質問は:この例のようにセットの定義を簡略化するためのアルゴリズム(疑似コード)はありますか?

1
tigrou

私は https://stackoverflow.com/questions/26028124/the-intersection-of-all-combinations-of-n-sets/26028865#26028865 で同様の質問に回答し、何が違うのか2番目のマップは、要素をそのセットのすべてのサブセットではなく、要素が含まれているセットのセットにマップする必要があります。

1
btilly