找到电源组和集合列表的交集

时间:2012-10-02 16:20:27

标签: java

给定一个大的任意集S和一组S_n,找到S_n中作为S的子集的所有集合。

换句话说,PowerSet(S)和S_n的交集。

是否有任何Java库可以快速完成这种数学运算?集合S_n的列表将相对较小,最多为几百个,并且这些集合将包含最多10个项目。但是,任意集(在运行时确定)可能有多达20个项目(在1000个集合中),因此具有巨大的功率集。

我正在寻找一种方法,可能会进行某种类型的离线计算,以便在非常快速(50 ms或更短)的时间内进行此确定。

实施例: S = {1,2,3}

S_n = [{1},{1,2},{5,4,6}]

结果= [{1},{1,2}]

4 个答案:

答案 0 :(得分:1)

伪代码

for each subset s_n
    if (s.containsAll(s_n)) {
        add it to the result list
    }

答案 1 :(得分:1)

我认为您可以使用接口retainAll(Collection<?> c)

中声明的标准方法java.util.Set

答案 2 :(得分:0)

您可能需要查看Google的Guava库。

https://code.google.com/p/guava-libraries/wiki/CollectionUtilitiesExplained#Sets

这可以为你计算powerset以及对集合的附加操作,也可以确保良好的性能(考虑到你正在计算一个powerset .....)。

答案 3 :(得分:0)

尝试使用Guava Sets

它有许多你需要的实用程序,如powerSet和intersection。