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