Java 求数组中给定n个集合的所有相交集合对

Java 求数组中给定n个集合的所有相交集合对,java,set,set-theory,Java,Set,Set Theory,假设我们得到一个包含字符串的哈希集数组列表。问题是打印具有非空交点的所有集合对。 列表的大小为n,每组为m 我所能想到的简单方法是迭代数组并检查每个元素。这需要n^2*m的复杂性。n^2用于for循环,m用于查找集合的交点 void printPairs(List<Set<String>> sets){ for(int i=0; i< sets.length; i++){ for(int j=0; j< sets.

假设我们得到一个包含字符串的哈希集数组列表。问题是打印具有非空交点的所有集合对。 列表的大小为n,每组为m

我所能想到的简单方法是迭代数组并检查每个元素。这需要n^2*m的复杂性。n^2用于for循环,m用于查找集合的交点

   void printPairs(List<Set<String>> sets){
        for(int i=0; i< sets.length; i++){
            for(int j=0; j< sets.length; j++){
                //if Intersection is not null than print i andj
            }
        }
    }
void打印对(列表集){
对于(int i=0;i

我还没有试过这个代码,但是应该可以。我正在寻找解决这个问题的更好办法。这是暴力解决方案,谢谢。

首先,构建一个索引:element->元素所在的集合列表。然后,对于索引中的每个元素,如果列表中有多个元素,则生成相应列表中的所有集合对。这看起来是一个合理的解决方案。构建索引所需的时间为m*n。我们可以将这些对保存在另一组对中。这将大大提高平均案例时间复杂性。但最坏的情况是相同的(所有集合都有相同的字符串)=n^2*m。如果我们在生成对之前重复删除连接集合的列表会怎么样?索引本身看起来像一个二部图:可能尝试将其与已知问题匹配?首先,在元素存在的位置构建一个索引:元素->集合列表。然后,对于索引中的每个元素,如果列表中有多个元素,则生成相应列表中的所有集合对。这看起来是一个合理的解决方案。构建索引所需的时间为m*n。我们可以将这些对保存在另一组对中。这将大大提高平均案例时间复杂性。但最坏的情况是相同的(所有集合都有相同的字符串)=n^2*m。如果我们在生成对之前重复删除连接集合的列表会怎么样?索引本身看起来像一个二部图:可能尝试将其与已知问题匹配?