找到所有套装的组合 - 套装封面?

2023-12-27

有人可以分享一个java程序吗,它可以执行以下操作。 如果给出以下集合作为输入,

a={1,2,3,8,9,10}
b={1,2,3,4,5}
c={4,5,7}
d={5,6,7}
e={6,7,8,9,10}

and

U={1,2,3,4,5,6,7,8,9,10}

程序将找到集合的所有组合,并找出包含 U 的所有元素的集合的最小数量。

在上面的例子中,最小数量是2。集合b和e一起覆盖了整个U。 所以基本上,这是一个集合覆盖问题。在集合覆盖问题中,我们给出一个宇宙 U,使得|U|=n,并设置S1,……,Sk是 U 的子集。集合覆盖是来自以下集合中的一些集合的集合 CS1,……,Sk其并集是整个宇宙 U。此外,我们必须最小化集合的成本。


您需要的是测试不断增加的组合大小,就像这样

interface Filter<T> {
    boolean matches(T t);
}
public static void main(String... args) throws IOException {
    Integer[][] arrayOfSets = {
            {1, 2, 3, 8, 9, 10},
            {1, 2, 3, 4, 5},
            {4, 5, 7},
            {5, 6, 7},
            {6, 7, 8, 9, 10},
    };
    Integer[] solution = {1,2,3,4,5,6,7,8,9,10};

    List<Set<Integer>> listOfSets = new ArrayList<Set<Integer>>();
    for (Integer[] array : arrayOfSets)
        listOfSets.add(new LinkedHashSet<Integer>(Arrays.asList(array)));
    final Set<Integer> solutionSet = new LinkedHashSet<Integer>(Arrays.asList(solution));

    Filter<Set<Set<Integer>>> filter = new Filter<Set<Set<Integer>>>() {
        public boolean matches(Set<Set<Integer>> integers) {
            Set<Integer> union = new LinkedHashSet<Integer>();
            for (Set<Integer> ints : integers)
                union.addAll(ints);
            return union.equals(solutionSet);
        }
    };

    Set<Set<Integer>> firstSolution = shortestCombination(filter, listOfSets);
    System.out.println("The shortest combination was "+firstSolution);
}

private static <T> Set<T> shortestCombination(Filter<Set<T>> filter, List<T> listOfSets) {
    final int size = listOfSets.size();
    if (size > 20) throw new IllegalArgumentException("Too many combinations");
    int combinations = 1 << size;
    List<Set<T>> possibleSolutions = new ArrayList<Set<T>>();
    for(int l = 0;l<combinations;l++) {
        Set<T> combination = new LinkedHashSet<T>();
        for(int j=0;j<size;j++) {
            if (((l >> j) & 1) != 0)
                combination.add(listOfSets.get(j));
        }
        possibleSolutions.add(combination);
    }
    // the possible solutions in order of size.
    Collections.sort(possibleSolutions, new Comparator<Set<T>>() {
        public int compare(Set<T> o1, Set<T> o2) {
            return o1.size()-o2.size();
        }
    });
    for (Set<T> possibleSolution : possibleSolutions) {
        if (filter.matches(possibleSolution))
            return possibleSolution;
    }
    return null;
}

Prints

The shortest combination was [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

找到所有套装的组合 - 套装封面? 的相关文章

随机推荐

  • 有没有办法滚动到锚点而不是用javascript跳转(比如平滑滚动)

    我有一个带有编号锚标记的大文档 如下所示 还有一个文本框 用于输入数字以转到使用的锚点window location hash 我还使用箭头键转到下一个或上一个锚点 我想滚动到锚点以便给出一些方向感 a some text a some t
  • 使用nodejs + Express处理服务器端和客户端错误的最佳方法是什么

    我想知道处理响应请求中的错误的最佳方法 我有这条接收请求的路线 app get getInfo function req res next let obj try obj date lastUpdatedDate utils appVers
  • 如何获取动态查询结果的行数?

    我创建了一个动态查询 一切运行良好 我使用以下命令执行查询 EXEC sp executesql SQLQuery 其中 SQLQuery 是一种动态查询 我唯一的问题是如何返回执行此查询后存在的行数 我希望我的问题很清楚 提前致谢 您可以
  • 通过指向错误函数类型的指针调用函数(未知)

    我有一个动态链接到库的程序 该程序将函数指针传递给该库以执行 但 ubsan 未定义行为清理程序 指定该指针位于不正确的函数类型上 而这种情况只会发生 如果回调函数有一个类作为参数 如果回调函数有一个类作为参数 但仅向前声明 如果我指定编译
  • 在 jQuery UI 可调整大小组件中嵌入 Ace 编辑器

    我正在尝试通过将 ace 编辑器嵌入到可调整大小的组件中来调整其大小 我一直在尝试使用 jQuery UI 可调整大小组件 但无法让 ace 编辑器出现在可调整大小组件内 Code
  • Intellij:不是有效的项目 ID:

    I updated Intellij Idea to 2018 2 6 现在我无法使用 Play Configuration 启动我的 Play Project 它给了我这个 error Not a valid project ID myP
  • Jackson 没有序列化字段

    我有以下课程 public class Entity private String id private String name private List
  • 如何在 Windows 工作站/服务器上将 Git 设置为 Web 项目 (ASP) 的 VCS?

    我们团队中有 5 个人从事一些 ASP 项目 局域网中有一台本地服务器运行Windows Server 我们不经常使用它 只是将其作为备份存储 我们还有一台运行 Windows Server 的远程服务器 我们在那里发布最终产品并使用远程桌
  • JavaScript .CSV 到数组

    我有一个 CSV 文件 它有 4 列和数千行 我想要 4 个数组 每一列一个 我最近开始学习 JavaScript 有人可以告诉我该怎么做吗 在 Python 中 这非常简单 只需几行代码 然而 当我看到JS中的相关帖子后 我感到非常困惑
  • 我如何在 JPQL 中内部加入子查询

    我需要一个用于 MySQL 查询的 JPQL SELECT FROM table1 t1 INNER JOIN table2 t2 ON t1 id t2 table1 id INNER JOIN SELECT FROM table1 t3
  • 在android聊天气泡中插入imageview可调

    我想在我的 Android 聊天中执行此操作 但我无法让我的照片适合我的泡泡 我有一个LinearLayout 他的背景是一个气泡9patch 在其中 我有一个图像视图 在此处插入图像但不是如何使其适合我们在屏幕上看到的背景 这就是我的形象
  • 我应该用通用类定义为我的文件命名什么?

    我正在编写几个具有泛型类型参数的类 但我需要重载这些类 因为在不同的场景中我需要不同数量的参数 基本上 我有 public class MyGenericClass
  • 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

    我正在使用Scanner方法nextInt and nextLine 用于读取输入 它看起来像这样 System out println Enter numerical value int option option input nextI
  • 未找到 Docker 映像入口点脚本

    我有一个Dockerfile like FROM frolvlad alpine oraclejdk8 slim ADD build libs zuul jar app jar ADD src main script startup sh
  • xarray.DataArray.roll 方法创建不需要的工件

    最近 我一直在使用 xarray 加载一堆 NetCDF 文件并使用 cartopy 绘制它们 今天我注意到一件有趣的事情 对于我感兴趣的区域 我需要选择 20W 到 40E 经度 根据设计 我无法用一种方法做到这一点KEdiff mean
  • NSTimer 和更新 UI

    我一直在努力让我的游戏能够正常运行NSTimer 我发现很多人都遇到了与我类似的问题 我只需要对某些事情进行一些澄清 基本上我有一个NSTimer在主线程上运行 该线程正在更新代表时间的图像 但我也有一个地图视图 当用户平移地图时 计时器被
  • 将嵌套的 Pojo 对象作为单独的对象存储在数据库中

    我使用 jackson 将 json 字符串映射到我的 HTModel 类 这基本上是一个简单的 Pojo class HTModel public class Post extends HTModel public String id p
  • Android 8:不允许明文 HTTP 流量

    我收到 Android 8 用户的报告称我的应用程序 使用后端提要 不显示内容 经过调查 我发现 Android 8 上发生以下异常 08 29 12 03 11 246 11285 11285 E 12 03 11 245 main Ex
  • Django 多对多关系添加不起作用

    我正在将 Django 的 ManyToManyField 用于我的模型之一 class Requirement models Model name models CharField max length 200 class Course
  • 找到所有套装的组合 - 套装封面?

    有人可以分享一个java程序吗 它可以执行以下操作 如果给出以下集合作为输入 a 1 2 3 8 9 10 b 1 2 3 4 5 c 4 5 7 d 5 6 7 e 6 7 8 9 10 and U 1 2 3 4 5 6 7 8 9 1