#c
#c
Вопрос:
Для этой проблемы временная сложность не имеет значения. Я уже создал функцию, которая может выполнять операции со строками над матрицей. Я попытался сделать это способом «bash»:
void recursionfordataset(int range, std::vector<std::vector<int>> Dummy) {
if (counter != 0) {
for (int x = -range; x <= range; x ) {
for (int y = -range; y <= range; y ) {
for (int i = 0; i < 2; i ) {
for (int j = 0; j < 2; j ) {
if (i != j) {
Dummy = add(Dummy[i], Dummy[j], Dummy, i, x, y);
std::vector<int> move = {x, y};
Moves.push_back(move);
counter -= 1;
recursionfordataset(range, Dummy);
if (x!=0 amp;amp; y!=0){
Dummy = add(Dummy[i],Dummy[j], Dummy, i, 1/x, 1/y);
}
recursionfordataset(range, Dummy);
}
}
}
}
}
} else {
bool yesno = TestIfIdentity(Dummy);
if (yesno == true) {
return;
} else {
Moves.clear();
counter = 9;
recursionfordataset(range, Dummy);
}
}
}
По сути, это перебирает все возможные комбинации операций со строками в определенном диапазоне. Функция add принимает параметры (первая строка, вторая строка, индекс первой строки, константа1, константа2), где изменение происходит с первой строкой, и оно равно constant1 x первая строка constant2 x вторая строка.
Я запускаю этот код локально, и он продолжает сбоить. Я не знаю альтернативного способа, который позволит получить точные ходы. Я подтвердил в исследовательской работе, что потребуется 9 ходов, чтобы матрица-манекен 2×2 была сведена к единичной матрице.
Я подумываю об использовании другого метода, кто-нибудь знает способ сделать это без «bash»? Любая помощь приветствуется.
Комментарии:
1. Не могли бы вы объяснить, что должен делать этот код? Шаги по сокращению строк мне непонятны…
2.
1/x
и1/y
большую часть времени будет равен нулю. Они также приведут к ошибке деления на ноль.3. Извините за ошибку деления на ноль, просто исправлено. Он по-прежнему вылетает. @Damien, смотри en.wikipedia.org/wiki/Gaussian_elimination .
4. Код сложный, в том числе для людей, которые знают, что такое исключение по Гауссу. Добавление некоторых комментариев может помочь сделать его менее загадочным.