如何在Java中实现MultiSet分区问题[给定源]

时间:2019-04-25 16:59:10

标签: java algorithm multiset combinators

我想用Java生成所有可能的多集分区。

我在http://www.cs.utsa.edu/~wagner/knuth/fasc3b.pdf那里找到了如何实现此算法的指南,在第39页上找到了描述,但无法将其编码为Java。您能帮我实施吗?

我已经尝试实现同一篇论文中的另一种算法,并且它确实可以很好地工作,因为它是一种生成标准集(不是多集)分区的算法。 这是我的代码

public void generate(int n) {
        int[] a = new int[n];
        int[] b = new int[n];
        int m = 1;
        int j;

        for (int i = 0; i < n; i++) {
            a[i] = 0;
            b[i] = 1;
        }

        // implemented algorithm for finding all possible
        // set partitions
        while (true) {
            while (true) {
                System.out.println(Arrays.toString(a));
                if (a[n-1] == m) break;
                else a[n-1] += 1;
            }
            j = n - 1;
            while (a[j-1] == b[j-1]) {
                j -= 1;
            }
            if (j == 1) break;
            else a[j-1] += 1;

            m = b[j-1] + (a[j-1] == b[j-1] ? 1 : 0);
            j += 1;
            while (j < n) {
                a[j-1] = 0;
                b[j-1] = m;
                j += 1;
            }
            a[n-1] = 0;
        }
    }

给定的currenSets数组告诉我们哪个set是指定位置的元素。我花了很多时间来了解如何实现此代码,但我想实现M算法(这是H算法)。

您能帮我用Java编写此算法的代码吗?

0 个答案:

没有答案