Как реализовать проблему MultiSet Partition в Java [данный источник] - PullRequest
0 голосов
/ 25 апреля 2019

Я хочу создать все возможные многосетевые разделы в 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;
        }
    }

Данный массив currentSets сообщает нам, в каком наборе находится элемент в указанной позиции. Мне потребовалось много времени, чтобы понять, как реализовать этот код, но я хотел реализовать M-алгоритм (это H-алгоритм).

Можете ли вы помочь мне написать код на Java для этого алгоритма?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...