给定一个大的任意集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}]
答案 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。