Комбинации матриц C++

Во-первых, спасибо за чтение. Я пытаюсь сделать "нубскую" программу и хотел использовать регистрационный код. Для завершения моего алгоритма шифрования мне нужно сгенерировать все матрицы 4x4, содержащие только числа от 0 до 9, как в следующем примере:

4 4 6 8

5 2 4 3

8 5 2 9

2 7 2 6

Я знаю, что таких комбинаций огромное количество, но меня это не остановит. Я пытался сам сделать это, используя for, но не могу понять.


person Nicolaie Alexandru    schedule 23.06.2011    source источник
comment
Вместо того, чтобы просто спрашивать нас, как это сделать, опубликуйте то, что у вас уже есть, чтобы мы могли помочь вам улучшить. Для матрицы 4 на 4 начните с создания многомерного массива.   -  person X-Istence    schedule 23.06.2011
comment
это 10^16 возможных комбинаций. точно не хочешь остановиться? :)   -  person Karoly Horvath    schedule 23.06.2011
comment
Вам нужна помощь с матричной математикой?   -  person Nathan Romano    schedule 23.06.2011
comment
Хранение этого в памяти займет почти 150 000 терабайт (при условии, что каждое число использует 1 символ). Я знаю, вы сказали, что огромное количество комбинаций вас не остановит, но требования к памяти остановят.   -  person riwalk    schedule 23.06.2011
comment
я просто не знаю, как генерировать матрицы со счетными элементами.   -  person Nicolaie Alexandru    schedule 23.06.2011
comment
Я не буду сохранять эти матрицы на своем жестком диске, лол. Я проверю каждую, чтобы увидеть, соответствует ли она моему алгоритму проверки.   -  person Nicolaie Alexandru    schedule 23.06.2011
comment
Хорошо, меняйте анализ. Если вы проверяете одну комбинацию за такт на своем компьютере, машине с частотой 3 ГГц потребуется 31 день, чтобы проверить каждую комбинацию. Добавьте к этому тот факт, что вы, вероятно, будете использовать НАМНОГО больше, чем один тактовый цикл за итерацию, и вас ждет долгое ожидание.   -  person riwalk    schedule 23.06.2011
comment
Вы действительно не знаете, что вы хотите делать. Ты?   -  person nikhil    schedule 23.06.2011


Ответы (1)


Я бы сохранил цифровую матрицу 4x4 как char[16], интерпретируя первые четыре символа как первую строку, следующие четыре символа как вторую строку и т. д. Вы можете легко сгенерировать все возможные значения с помощью рекурсии с циклом for для каждого уровень.

void print_all_possible_matrices(char *matrix, int level) {
    if(level == 16) {
        print_matrix(matrix);
    }
    for(int i = 0; i < 10; ++i) {
        matrix[level] = i;
        print_all_possible_matrices(matrix, level + 1);
    }
}

Вы бы использовали это следующим образом:

int main() {
    char matrix[16];
    print_all_possible_matrices(matrix, 0);
}

Но на это уйдет очень много времени.

person ahven    schedule 23.06.2011