Реализация алгоритма на C# исходя из видео.
int n = 3; int m = 4; int[,] mas = new int[n, m]; int[] y = new int[m]; mas[0, 0] = -1; mas[0, 1] = 1; mas[0, 2] = -1; mas[0, 3] = 1; mas[1, 0] = 1; mas[1, 1] = -1; mas[1, 2] = 1; mas[1, 3] = 1; mas[2, 0] = -1; mas[2, 1] = 1; mas[2, 2] = -1; mas[2, 3] = -1; int i = 0, j = 0; string s = ""; int[,] w = new int[m, m];// int[,] tm = new int[m, m];//Временный массив int k = 0; //нахожу W for (k = 0; k < n; k++) { //Транспортирую матрицу for (i = 0; i < m; i++) for (j = 0; j < m; j++) tm[i, j] = mas[k, i] * mas[k, j]; //нахожу сумму tm[i] for (i = 0; i < m; i++) for (j = 0; j < m; j++) w[i, j] += tm[i, j]; } //Обнуляю главную диагональ w for (i = 0; i < m; i++) w[i, i] = 0; int[] a = new int[m];//ф-ия активации bool b = false; k = 0;//Счётчик int l = -1;//Индекс подходящей строки while (!b && k < 200) { //Вычисляю y' for (i = 0; i < m; i++) for (j = 0; j < m; j++) a[i] += w[i, j] * y[j]; //Обрабатываю y' ф-ей активации for (i = 0; i < m; i++) if (a[i] >= 0) a[i] = 1; else a[i] = -1; //Сравниваю bool st = false; for (i = 0; i < n; i++) { st = true; for (j = 0; j < m; j++) if (mas[i, j] != a[j]) { st = false; break; } if (st) { l = i; break; } } if (l != -1)b = true; else { k++;//Увеличиваю счетчик //Обновляем у' for (i = 0; i < m; i++) y[i] = a[i]; //Обнуляем a for (i = 0; i < m; i++) a[i] = 0; } } if (l != -1) { s += "\nнайдено совпадение с X=" + (l + 1).ToString() + "\nГлубина поиска:" + (k + 1).ToString(); } else { s += "\nнет совпадений"; }
Спасибо, что заметили опечатку. Метод GenMass() был в исходном проекте, но на сайте была выложена часть.
Метод GenMass() генерирует массив mas исходя из dataGridView1. Но в данном примере mas заполняется сразу в коде.
P.S. Вы можете скачать исходник и посмотреть полный код проекта.