有没有快速求无超集的集合的算法

假设现在输入一堆集合,有没有什么算法能快速提取其中不含超集的集合,不用穷举所有集合关系的,或者帮忙分析下可行的思路也可以。
例如:

输入

[A, B, C]
[A, B]
[B, C]
[B, C, D]

输出

[A, B, C]
[B, C, D]

思路如下:
方案一、首先取出原始集合中最大长度的集合(可能有多个),然后声明一个结果集合(用于存放最终返回的数据),遍历最大长度的集合,将原始集合中没有交集的放到结果集合中,最后返回
方案二、取出原始集合中最大长度的集合(可能有多个),遍历最大长度的集合,将原始集合中有交集的对象一一删除,最后返回删除后的原始集合

不知道是不是这个意思,有用请采纳


    public static void main(String[] args) {
        String[] arr1 = new String[]{"A","B","C"};
        String[] arr2 = new String[]{"A","B"};
        String[] arr3 = new String[]{"B","C"};
        String[] arr4 = new String[]{"A","B","D"};
        List<String[]> list = new ArrayList<>();
        list.add(arr1);
        list.add(arr2);
        list.add(arr3);
        list.add(arr4);

        List<String[]> collect = list.stream().filter(item -> {
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i).length > item.length && Arrays.asList(list.get(i)).containsAll(Arrays.asList(item))) {
                        return false;
                }
            }
            return true;
        }).collect(Collectors.toList());
        System.out.println(collect);
    }

建议使用树型结构 将所有的数组添加到树上。然后遍历获取即可。
1、建立一个根节点,。
2、遍历所有数组,往树上添加元素
3、然后从根节点开始往下遍历 即可得到结果

有序集合+字典树可以做到不遍历集合关系。无序集合暂时还想不到解决

可以用位运算,如果集合里面只有26个字母,那么每个集合就可以看作一串二进制数,
比如[ABCDEFGHIJKLMNOPQRSTUVWXYZ]是按照顺序的26位,4个字节就可以表达26位。
那么
[A, B, C] = 11100000000000000000000000
[A, B]= 11000000000000000000000000
[B, C]= 01100000000000000000000000
[B, C, D]= 01110000000000000000000000
然后任意两个集合做“与”运算,运算结果与其中一个相同,说明另一个就是其中一个的超集,然后就可以排除其中一个,再继续比较。
比如[A, B, C]与[A, B]的结果是11000000000000000000000000与[A, B]的值相同,然后[A, B]被排除,以此类推。
位运算的性能程序员都懂的。

请采纳,十分感谢!

https://blog.csdn.net/weixin_32380307/article/details/114033647