一组内的所有对组合

martijnn2008

我想计算您可以组成一组的所有可能的配对列表。例如:

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类,没问题:)

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

编辑:我期待所有答案。现在我有了工作代码,对此表示感谢。但是我需要将其用于大小为n = 26:(。的输入中。我还没有实现所有功能,但是我想它会运行一段时间了:(。

马可13

如果我正确理解这一点,那么对这个问题的递归解决方案应该很简单:

  • 从集合中删除第一个元素A
  • 对于每个剩余的元素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);
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

列出一组元素的所有组合

来自分类Dev

一组值的所有唯一组合

来自分类Dev

r-查找除同一组中的组合以外的所有组合

来自分类Dev

组合 3 个表以生成所有列的唯一组合

来自分类Dev

查找具有两列的唯一组合的所有行

来自分类Dev

查找具有两列的唯一组合的所有行

来自分类Dev

找出唯一和为一组数字的所有数字组合

来自分类Dev

生成项目的所有唯一组合

来自分类Dev

删除除两列的最新唯一组合以外的所有内容

来自分类Dev

在Haskell中生成一组布尔变量的所有组合

来自分类Dev

找到重叠项的所有唯一组合?

来自分类Dev

一组玩家的所有可能的纸牌/扑克手组合

来自分类Dev

如何找到多维数组中每个元素的所有唯一组合

来自分类Dev

查找固定大小的所有唯一组合以达到给定的平均范围

来自分类Dev

每次使用相同的选项获得x个斑点的所有唯一组合

来自分类Dev

如何从SQL中的1列返回所有唯一组合?

来自分类Dev

查找简单路径的所有唯一组合

来自分类Dev

5 * 12网格中所有唯一组合的算法

来自分类Dev

删除除两列的最新唯一组合以外的所有内容

来自分类Dev

生成项目的所有唯一组合

来自分类Dev

如何找到多维数组中每个元素的所有唯一组合

来自分类Dev

从数组获取给定数量的元素的所有唯一组合

来自分类Dev

配对连续数字后打印一组的所有组合

来自分类Dev

从排列列表中获取所有唯一组合

来自分类Dev

如何找到以两个为一组的List的所有组合?

来自分类Dev

Java:将一组整数的所有可能组合放在矩阵列表中的算法

来自分类Dev

找到 1 到 k 之间 n 个数字的所有唯一组合

来自分类Dev

JavaScript,从多个数组中获取所有唯一组合

来自分类Dev

递归函数来获得两个或多个的所有唯一组合

Related 相关文章

  1. 1

    列出一组元素的所有组合

  2. 2

    一组值的所有唯一组合

  3. 3

    r-查找除同一组中的组合以外的所有组合

  4. 4

    组合 3 个表以生成所有列的唯一组合

  5. 5

    查找具有两列的唯一组合的所有行

  6. 6

    查找具有两列的唯一组合的所有行

  7. 7

    找出唯一和为一组数字的所有数字组合

  8. 8

    生成项目的所有唯一组合

  9. 9

    删除除两列的最新唯一组合以外的所有内容

  10. 10

    在Haskell中生成一组布尔变量的所有组合

  11. 11

    找到重叠项的所有唯一组合?

  12. 12

    一组玩家的所有可能的纸牌/扑克手组合

  13. 13

    如何找到多维数组中每个元素的所有唯一组合

  14. 14

    查找固定大小的所有唯一组合以达到给定的平均范围

  15. 15

    每次使用相同的选项获得x个斑点的所有唯一组合

  16. 16

    如何从SQL中的1列返回所有唯一组合?

  17. 17

    查找简单路径的所有唯一组合

  18. 18

    5 * 12网格中所有唯一组合的算法

  19. 19

    删除除两列的最新唯一组合以外的所有内容

  20. 20

    生成项目的所有唯一组合

  21. 21

    如何找到多维数组中每个元素的所有唯一组合

  22. 22

    从数组获取给定数量的元素的所有唯一组合

  23. 23

    配对连续数字后打印一组的所有组合

  24. 24

    从排列列表中获取所有唯一组合

  25. 25

    如何找到以两个为一组的List的所有组合?

  26. 26

    Java:将一组整数的所有可能组合放在矩阵列表中的算法

  27. 27

    找到 1 到 k 之间 n 个数字的所有唯一组合

  28. 28

    JavaScript,从多个数组中获取所有唯一组合

  29. 29

    递归函数来获得两个或多个的所有唯一组合

热门标签

归档