Java 查找幂集和幂集列表的交点
给定一个大的任意集合S和集合S_n的列表,在S_n中找到所有属于S的子集的集合 换句话说,动力集和S_n的交点 有没有Java库可以快速完成这类计算?集合S_n的列表相对较小,最多几百个,这些集合最多包含10个项目。但是,任意集合(在运行时确定)可能有多达20项(1000个集合中的20项),因此具有巨大的功率集合 我正在寻找一种方法,也许是做一些离线计算,来快速(50毫秒或更短)进行这个决定 例如: S={1,2,3} S_n=[{1},{1,2},{5,4,6}] 结果=[{1},{1,2}]伪代码Java 查找幂集和幂集列表的交点,java,Java,给定一个大的任意集合S和集合S_n的列表,在S_n中找到所有属于S的子集的集合 换句话说,动力集和S_n的交点 有没有Java库可以快速完成这类计算?集合S_n的列表相对较小,最多几百个,这些集合最多包含10个项目。但是,任意集合(在运行时确定)可能有多达20项(1000个集合中的20项),因此具有巨大的功率集合 我正在寻找一种方法,也许是做一些离线计算,来快速(50毫秒或更短)进行这个决定 例如: S={1,2,3} S_n=[{1},{1,2},{5,4,6}] 结果=[{1},{1,2}]
for each subset s_n
if (s.containsAll(s_n)) {
add it to the result list
}
我认为您可以使用interface
java.util.Set
中声明的标准方法retainal(Collection c)
,您可能想看看Google的番石榴库
这可以为您计算功率集以及集合上的任何其他操作,还可以确保良好的性能(考虑到您正在计算功率集…)。请尝试
它有许多您需要的实用程序,如powerSet和intersection。在Set中使用gander。containsAll()请记住,
HashSet的迭代性能与容量和大小成正比,因此在实例化集合时要小心。集合列表(S\n)中的每个集合都将被排序,一开始,集合S不是。这需要我计算一组20项的幂集合,这相当大。这种方法可能会奏效。我可以通过只返回至少包含任意集合中一个元素的集合来减少数据库端的集合列表,实际上我不需要幂集合,这就是我试图解释的。我需要做的是在集合列表中快速找到每个集合,这些集合是我当前集合的子集。我刚才提到集合也可以生成powerset。如果我了解你需要什么,交叉口操作可能会在你的情况下起作用。。。。