Здравствуйте. Есть проблема со временем выыполнения алгоритма. Вот его суть. Пусть есть массив из чисел 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30. Нужно построить матрицу5х6 из данных чисел. Берем 1-е число массива - это 1, умножаем на 2, полученное число умножаем на 2 и т.д. Т.о. первая строка матрицы
1 2 4 8 16. Чтобы построить вторую строку, ищем в массиве 1-е число, которого нет в 1-ой строке матрицы - это 3, тогда вторая строка матрицы имеет вид 3 6 12 24 17, получаем именно 17, т.к. умножение идет по модулю 31. Таким образом, идем дальше и матрица имеет вид:
1 2 4 8 16
3 6 12 24 17
5 10 20 9 18
7 14 28 25 19
11 22 13 26 21
15 30 29 27 23
Моя реализация на c# выглядит так:
public int GetFirst(Int64[] Mas)//позиция ненулевого элемента
{
int k = 0;
for (int i = 0; i < 31; i++)
{
if (Mas[i] != 0)
{
k = i;
break;
}
}
return k; }
for (int i = 0; i < 6; i++)
{
k = GetFirst(Mas);
Matr[i, 0] = Mas[k];
Mas[k] = 0;
for (int j = 1; j < 6; j++)
{
Matr[i, j] = 2 * Matr[i, j - 1] % 31;
for (int t = 0; t < 31; t++)
{
if (Mas[t] == Matr[i, j]) { k = t; break; }
}
Mas[k] = 0;
}
}
Может как-то можно по-другому?