/ Generovanie tzv. Modulo index - algoritmus, n-tice, kombinatorika

Generovanie tzv. Modulo index - algoritmus, n-tice, kombinatorika

Hľadám algoritmus (alebo C-likeimplementácia, žiadne dostupné nástroje), ktoré generuje všetky n-tice [a_0 a_1 ... a_ (n-1)] tak, že 0 <= a_i <= i + 1. Ukazovatele v literatúre sú tiež vítané.

odpovede:

3 pre odpoveď č. 1

niečo také?

void printTuples (int n, int[] a, int i=0) {
if (i == n) {
//print a
return;
}
for (int j=0; j<=i+1; j++) {
a[i] = j;
printTuples (n, a, i+1);
}
}

0 pre odpoveď č. 2

Je to nazývané "backtracking", hľadanie wikipedia o tom, môžete to urobiť rekurzívne alebo iteračné.

Amir, chce medzi 0 a i + 1, nie medzi 0 a i. A myslím, že prechádzajúce polia na stack je pomalšie, než aby sa k nim dostali ako globálne.

Myslím, že chcete niečo takéto:

int a[YOUR_LENGTH];

void backtracking (int n, int counter) {
if (counter == n) {
// do whatever
return;
}
for (int j = 0; j <= counter + 1; ++ j) {
a[counter] = j;
backtracking(n, counter + 1);
}
}