首页 > 解决方案 > 计算排列的最佳方法

问题描述

我试图找出在特定场景下查找/自动化所有可能排列的最佳方法。

我有一个程序,它接收一组数字 [X, Y , Z],每个数字都有一个预定义的不确定性。因此,我想针对 [X, Y , Z], [X+e, Y, Z] [xe, Y, Z], [X, Y+e, Z] 等运行我的程序。现在我已经建立一个包含所有 27 种可能性的对象,我正在遍历它,以便为我的程序提供一组新的输入。(我将使用不同的输入集运行我的程序 27 次)

随着时间的推移,我需要更新我的程序以接收更多的数字。所以我想知道是否有更好的方法来计算我的基本集可能具有的所有可能排列。

我宁愿知道实现这一点的方式,而不是使用任何现有的库(如果有的话)。我认为这是一个学习计划。谢谢!

标签: javapermutation

解决方案


这是我前段时间发现的一种排列方法。它在方法中打印它们。它只进行单维排列,但您可以根据需要对其进行调整。

    public static void generate(int n, int[] a) {
        if (n == 1) {
              System.out.println(Arrays.toString(a));
        } else {
            for (int i = 0; i < n - 1; i++) {
                generate(n - 1, a);
                if ((n & 1) == 0) { 
                    swap(i, n - 1, a);
                } else {
                    swap(0, n - 1, a);
                }
            }
            generate(n - 1, a);
        }
    }
    
    public static void swap(int a, int b, int[] array) {
        int temp = array[a];
        array[a] = array[b];
        array[b] = temp;
    }

推荐阅读