Генерация кортежей по модулю индекса - PullRequest
4 голосов
/ 26 июля 2010

Я ищу алгоритм (или C-подобную реализацию, нет доступных itertools), который генерирует все кортежи [a_0 a_1 ... a_ (n-1)], так что 0 <= a_i <= i + 1.Указатели на литературу также приветствуются. </p>

Ответы [ 2 ]

3 голосов
/ 26 июля 2010

как то так?

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 голосов
/ 26 июля 2010

Это называется возвращением. Ищите в Википедии об этом. Вы можете сделать это как рекурсивно, так и итеративно.

Амир, он хочет от 0 до i + 1, а не от 0 до i. И я думаю, что передача массивов в стеке медленнее, чем доступ к ним как к глобальному.

Я думаю, вы хотите что-то вроде этого:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...