一组内所有对的组合

2024-04-17

我想计算你可以组成一个集合的所有可能的对列表。例如:

input = [1, 2, 3, 4, 5, 6]

output = {[(1,2), (3,4), (5,6)],
          [(2,3), (4,5), (1,6)],
          [(2,4), (1,3), (5,6)],
          [...], .... }

注意:这个例子只是输出中的一些随机内容,大部分都被删除了。我不关心列表的顺序或这些列表中的对。

我想会有(n-1)(n-3)(n-5)...可能的对列表。首先,我认为您可以对输入列表进行所有排列。通过所有这些排列,您可以将第一个项目与第二个项目分组,将第三个项目与第四个项目分组。但显然这是非常低效的,因为你会n!列表中的项目,您只需要(n-1)(n-3)(n-5)...。有人可以告诉我如何更有效地做到这一点吗?是否有已知的算法或者可以使用哪些适当的关键字进行搜索?我想在JAVA中实现这个,所以如果你想在JAVA中使用Collections类没问题:)

更清楚地说:输入始终由偶数个元素组成,因此一个列表中的所有对一起都是输入中的所有元素。

Edit:我已经看过所有答案。现在我有了工作代码,谢谢。但我需要将它用于具有大小的输入n = 26:(。我还没有实现一切,但我想它会运行一段时间:(。


如果我理解正确的话,这个问题的递归解决方案应该相当简单:

  • 从集合中删除第一个元素 A
  • For each remaining element B:
    • 从集合中删除元素 B
    • 创建一对 (A,B) 并将其存储为当前解决方案的一部分
    • 对剩余的集合进行递归。这将为当前解决方案添加更多对。如果集合中没有更多元素,则将当前解决方案存储为最终解决方案之一。
    • 将元素 B 添加到集合中
  • 将元素 A 添加到集合中

添加和删​​除元素的部分并不真正包含在这个示例实现中,因为它为迭代和递归调用创建了一个列表和一个新集合,但想法应该很清楚。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

public class AllPairs
{
    public static void main(String[] args)
    {
        Set<Integer> set = new LinkedHashSet<Integer>(
            Arrays.asList(1,2,3,4,5,6));

        ArrayList<List<List<Integer>>> results = 
            new ArrayList<List<List<Integer>>>();
        compute(set, new ArrayList<List<Integer>>(), results);
        for (List<List<Integer>> result : results)
        {
            System.out.println(result);
        }
    }

    private static void compute(Set<Integer> set,
        List<List<Integer>> currentResults,
        List<List<List<Integer>>> results)
    {
        if (set.size() < 2)
        {
            results.add(new ArrayList<List<Integer>>(currentResults));
            return;
        }
        List<Integer> list = new ArrayList<Integer>(set);
        Integer first = list.remove(0);
        for (int i=0; i<list.size(); i++)
        {
            Integer second = list.get(i);
            Set<Integer> nextSet = new LinkedHashSet<Integer>(list);
            nextSet.remove(second);

            List<Integer> pair = Arrays.asList(first, second);
            currentResults.add(pair);
            compute(nextSet, currentResults, results);
            currentResults.remove(pair);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一组内所有对的组合 的相关文章

  • Spring - 属性“name”不允许出现在元素“constructor-arg”中

    我在程序中使用 hsqldb 作为数据库 我想通过 spring 注入构造函数值 这是我的豆子
  • 了解 hibernate @Type 注解

    来自休眠官方文档 http docs jboss org ejb3 app server HibernateAnnotations reference en html single d0e2018 org hibernate annotat
  • Linkify 是否适用于 Android 中的 TextView?

    我有这段代码适用于调用 EditText 的方法 我尝试对 TextView 使用相同的代码 但它不起作用 文本不会像 EditText 那样变成超链接 有人知道为什么吗 public class MainActivity extends
  • 何时捕获 java.lang.Error?

    在什么情况下应该抓住java lang Error在申请上 一般来说 永远不会 但是 有时您需要捕获特定的错误 如果您正在编写类似框架的代码 加载第 3 方类 那么最好抓住LinkageError 未找到类定义 链接不满足 类更改不兼容 我
  • 为什么我的 android 项目中 onStart() 方法在 onCreate 之前运行?

    根据 Activity 的生命周期 onCreate 在应用创建时会被调用一次 然后 onStart 方法在整个 Activity 生命周期中可能会被调用多次 然而这并不是发生在我身上的事情 我的 onCreate 方法中有以下代码 mRe
  • 原子地从 ConcurrentQueue 中获取所有内容

    我有多个线程生成项目并将它们粘贴在一个公共的ConcurrentQueue private ConcurrentQueue
  • 测试 powermock 模拟客户端调用的 http 服务器超时

    我需要为 connectTimeout 和 SocketTimeout 异常编写测试用例 我使用 powerMock 创建模拟对象 下面是我的代码 但是我的模拟对象出现空指针异常 任何帮助表示赞赏 package com util impo
  • 如何获取 Android 中其他应用程序的屏幕时间?

    我想达到在 Android 系统上运行的每个应用程序的屏幕时间 例如 Facebook 工作时间为 3 小时 但屏幕时间为 1 2 小时 我怎么才能得到它 android app usage 使用情况统计 public final clas
  • 多行 JTable 单元格在编辑期间不是多行的

    我正在开发一个应用程序 它有一个需要多行单元格的 JTable 因此 我扩展了 JTextArea 一切都显示出来了 但是当我尝试编辑单元格时 文本显示为单行 编辑后变为多行 我希望文本在编辑过程中保持多行 有没有办法做到这一点 创建您的表
  • 如何使用Netbeans的不确定进度条样式?

    我正在使用 Nimbus 外观和感觉编写 Java 应用程序 不幸的是 Nimbus 外观和感觉的不确定 JProgressBars 的外观是AWFUL 见下文 另一方面 我注意到 Netbeans 与 Nimbus 的外观和感觉有不同的不
  • 在eclipse中的另一个项目中使用一个项目的包

    如何在定义包的主项目之外使用包的类 例如 假设 people 包中有一个属于 ProjectOne 的 Employee 类 假设另一个具有相同功能的项目 ProjectTwo 需要 Employee 我应该在那里做什么 在 Package
  • JDA Events 更新版本后停止工作 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个使用最新版本的 JDA 4 2 0 168 用 Ja va 开发的不和谐机器人 我的机器人中有几个事件 但只有一
  • 如何从Java中的sqlite中的多个表中进行选择?

    我正在尝试学习如何在 java 程序中使用 sqlite 数据库 不是安卓 我去了this https bitbucket org xerial sqlite jdbc overview链接 下载 jdbc 库并复制示例 该示例运行正常 没
  • 有什么方法可以处理 HTTP/2 Goaway 在 HttpClient java 中收到的 IOException 吗?

    我在应用程序中进行 API 调用 在某个时候它会随机抛出java io IOException 149 222 1 1 553232 GOAWAY received 使用Java 11环境 无论如何要解决此异常而不是迁移到 Http 1 1
  • TextField“更改”事件仅在模糊时触发

    通常 Change 事件将在 TextField 失去焦点 模糊 后触发 但我需要它在字段值发生变化时立即触发 而不需要失去对该字段的关注 KeyListener 不会删除它 因为该值可能来自条形码扫描仪等 有什么办法可以做到这一点吗 提前
  • 像耐心/克朗代克纸牌游戏一样拖动节点

    我正在做克朗代克游戏 逻辑一切正常 我只是在使用 javafx 中的 UI 时遇到问题 我一直在尝试从 桌面堆 周围移动 拖动卡片 但没有达到预期的结果 我的卡片是一个 ImageView 里面有一个图像 这些卡片位于窗格内 Pane ta
  • “[B”是什么样的 Java 类型?

    我正在尝试通过 Java 代码 Hibernate 从 MySQL DB 获取 MD5 加密密码 但我既得不到 Strong 也得不到任何合理的 Java 类型 我唯一收到的是这条无用的消息 java lang ClassCastExcep
  • 简化债务加权有向图的算法

    我一直在使用我编写的一个小Python脚本来管理室友之间的债务 它有效 但缺少一些功能 其中之一是简化不必要的复杂债务结构 例如 如果下面的加权有向图代表一些人 箭头代表他们之间的债务 爱丽丝欠鲍勃 20 美元 查理欠 5 美元 鲍勃欠查理
  • Java初学者网络开发工具包/环境

    我的任务是使用 java 和 mysql 开发一个交互式网站 使用 servlet 检索和处理数据 使用小程序对客户端数据进行特殊处理 并处理客户端对不同数据视图的请求 您会推荐什么作为使用 java 进行 Web 开发的合适的通用工具包
  • java.library.path 中没有字体管理器

    以下代码在我的桌面上运行得很好 BufferedImage image new BufferedImage width height BufferedImage TYPE INT RGB Graphics g image getGraphi

随机推荐

  • chrome 扩展,弹出窗口的高度

    在我看来 弹出窗口的高度有 489 像素的限制 如果我将弹出窗口的主体元素设置为 600 像素的高度 则弹出窗口将获得一个滚动条 因为内部页面变大 但弹出窗口不会更改其大小 是否可以使弹出窗口的高度大于 489 像素 Set height两
  • 在 iOS 12 中以编程方式从屏幕时间获取应用程序使用情况

    我正在开发一个项目 我想获得其他应用程序的使用时间 苹果发布了iOS 12并提供了新功能Screen Time 我想知道Apple是否提供任何方式或API来从中获取数据 不可以 在 iOS 上 每个应用程序都在自己的沙箱中运行 无法查看其他
  • 在 Angular 4 中使用权限的最佳方式是什么?

    在我的 Angular 4 项目中 我想使用从 API 获得的权限 权限保存为带有 ids 的数组 某些单个元素 例如用户或博客文章 具有允许权限的属性 这些属性允许或不允许编辑或删除等操作 作为带有 id 的数组 在 Angular 4
  • CruiseControl.Net + SSL

    因此 我刚刚在我的 PC 上安装了 Cruisecontrol NET 并且使用 VisualSVN 通过 https 和 虚拟 证书进行 SVN 托管 所有这些都在我的本地电脑上 问题是 当我尝试运行 Cruisecontrol NET
  • 如何在页面加载时将页面滚动到底部?

    要求 我想在页面加载时将内容滚动到页面底部 这是我的 html 代码
  • 宏定义确定大端还是小端机?

    是否有一行宏定义来确定机器的字节顺序 我正在使用以下代码 但将其转换为宏会太长 unsigned char test endian void int test var 1 unsigned char test endian unsigned
  • 默认情况下,ASP.NET MVC 4 是否需要额外的 XSS 处理

    默认情况下 ASP NET MVC 4 会忽略帖子消息中的 HTML 输入 如果我没有明确接受 HTML 是否需要编写任何代码来保护我的网站免受 XSS 攻击 我不会使用 AllowHtml or ValidateInput false 我
  • 镜头变焦模糊变量

    我在使用时遇到困难zoom函数由下式给出Control Lens 使用我的自定义 monad 变压器HearthMonad 我不知道如何满足GHC的 模棱两可型 投诉 有问题的代码位于drawCard 我该如何解决这个问题 我是否必须创建自
  • phpmyadmin自动注销时间

    如何更改 phpmyadmin 自动注销时间 它会在 1440 秒后自动注销 这对我来说非常低 如何更改选项或完全删除登录请求 更改 php ini 将更改服务器上运行的所有网站的会话持续时间 要仅为 PhpMyAdmin 更改它 请打开c
  • 使用单独的规则定义和实例化时,Boost Spirit X3 AST 无法处理语义操作

    我尝试将 Boost Spirit X3 与语义操作结合使用 同时将结构解析为 AST 如果我使用没有单独定义和实例化的规则 它就可以正常工作 例如 include
  • Facebook 应用程序选项卡 -> 使用 PHP 进行外部链接

    我目前在 Facebook 选项卡上有一个应用程序 我想知道是否有办法让我深入链接到该应用程序选项卡上的项目 例子 用户在应用程序中 正在搜索书籍 找到一本他们喜欢的书 并想与朋友分享 他们点击分享它 我可以提取所有信息 但是我没有深层链接
  • java - JUnit 测试失败挂钩上的 Cucumber

    我们使用 Cucumber JVM 编写验收测试脚本 并使用 JUnit 来执行它们 通过 JUnit Cucumber 运行程序 由于这些测试涉及 Selenium WebDriver 因此我希望能够在测试失败时截取屏幕截图 我有代码 如
  • 如何在 Dreamweaver 中设置 PHP 测试服务器?

    我正在尝试设置一个 PHP 服务器 以便我可以使用 Dreamweaver 中的 实时 功能 此外还可以在浏览器中预览 而不必每次都通过 FTP 应用程序上传 php 文件 这效率不高当我想做快速的小预览时 我已经设置了一个新网站 并在本地
  • Javascript 字符串到 int 的转换

    我在页面中嵌入了以下 JS var round Math round var id this attr id var len id length var indexPos len 1 index of the number so that
  • 液态状态机:它是如何工作的以及如何使用它?

    我现在正在学习LSM 液态状态机 我试图了解它们到底是如何用于学习的 我对在网上读到的内容感到非常困惑 我将写出到目前为止我所理解的内容 但这可能是不正确的 所以如果您能纠正我并解释什么是正确的 我会很高兴 LSM 根本没有经过训练 它们只
  • Scala 突破地图

    当满足这样的条件时 我需要打破 seq 映射 其中foo将返回一个对象列表 其中大小取决于找到 targetId 所需的时间 def foo ids Seq String targetId String ids map id gt getO
  • Apache Ivy 如何解析 ivysettings.xml 文件中提供的工件模式中的变量?

    如果我的 ivysettings xml 文件包含
  • 使用 php 调用 __construct 内的函数

    一个简单的 PHP 问题 我找不到答案 是否可以从 construct 调用函数 例如 如果我使用 My Controller 解决方案here http davidwinter me articles 2009 02 21 authent
  • 更改 HTML5 音频标签中的控件颜色 [重复]

    这个问题在这里已经有答案了 是否可以更改 HTML5 音频标签中的 播放 暂停 和 音量 颜色 使用 Firefox 时它们的颜色非常深 使播放器看起来像是禁用的 答 不可以 目前 您无法更改 HTML5 音频标签的控件颜色 如果启用控件属
  • 一组内所有对的组合

    我想计算你可以组成一个集合的所有可能的对列表 例如 input 1 2 3 4 5 6 output 1 2 3 4 5 6 2 3 4 5 1 6 2 4 1 3 5 6 注意 这个例子只是输出中的一些随机内容 大部分都被删除了 我不关心