Гид по технологиям

Проверка идентичности двух матриц в C++, Python, JavaScript и C

4 min read Алгоритмы Обновлено 04 Jan 2026
Проверка идентичности матриц в C++, Python, JS и C
Проверка идентичности матриц в C++, Python, JS и C

Фон: матрица и логотипы Python, C++, JavaScript и C

Задача

Вам даны две матрицы mat1[][] и mat2[][]. Нужно определить, идентичны ли они. Матрицы считаются идентичными, если:

  • одинаковое количество строк и столбцов;
  • все соответствующие элементы равны.

Если матрицы идентичны, вывести “Yes, the matrices are identical”. Если нет — вывести “No, the matrices are not identical”.

Примеры проверки идентичности двух матриц

Условия идентичности матриц

  1. Равенство размеров: число строк и столбцов совпадают.
  2. Равенство всех соответствующих элементов: для любого индекса (i, j) mat1[i][j] == mat2[i][j].

Подход

Общий, надёжный и простой алгоритм:

  1. Сначала проверить размеры (быстрая отбраковка).
  2. Пройти по всем элементам в двух вложенных циклах (строки и столбцы).
  3. Если найдётся пара элементов, которые не равны — матрицы не идентичны.
  4. Если цикл завершился без различий — матрицы идентичны.

Сложность: O(rows · cols) по времени, O(1) дополнительной памяти (если не считать самих матриц).

Важно: для чисел с плавающей точкой вместо прямого сравнения используйте сравнение с эпсилон (|a-b| < eps).

Реализация и примеры кода

В следующих разделах приведены примеры на C++, Python, JavaScript и C. Код в примерах демонстрирует предложенный подход: проверка соответствующих элементов.

C++

Ниже — оригинальная программа на C++ для проверки идентичности матриц:

// C++ program to check if two matrices are identical  
#include   
using namespace std;  
  
// The order of the matrix is 3 x 4  
#define size1 3  
#define size2 4  
  
// Function to check if two matrices are identical  
bool isIdentical(int mat1[][size2], int mat2[][size2])  
{  
 for (int i = 0; i < size1; i++)  
 {  
 for (int j = 0; j < size2; j++)  
 {  
 if (mat1[i][j] != mat2[i][j])  
 {  
 return false;  
 }  
 }  
 }  
 return true;  
}  
  
// Function to print a matrix  
void printMatrix(int mat[][size2])  
{  
 for (int i = 0; i < size1; i++)  
 {  
 for (int j = 0; j < size2; j++)  
 {  
 cout << mat[i][j] << " ";  
 }  
 cout << endl;  
 }  
}  
  
// Driver code  
int main()  
{  
 // 1st Matrix  
 int mat1[size1][size2] = { {2, 2, 2, 2},  
 {2, 2, 2, 2},  
 {2, 2, 2, 2} };  
 cout << "Matrix 1:" << endl;  
 printMatrix(mat1);  
  
// 2nd Matrix  
 int mat2[size1][size2] = { {2, 2, 2, 2},  
 {2, 2, 2, 2},  
 {2, 2, 2, 2} };  
 cout << "Matrix 2:" << endl;  
 printMatrix(mat2);  
  
if(isIdentical(mat1, mat2))  
 {  
 cout << "Yes, the matrices are identical" << endl;  
 }  
 else  
 {  
 cout << "No, the matrices are not identical" << endl;  
 }  
  
// 3rd Matrix  
 int mat3[size1][size2] = { {3, 3, 3, 3},  
 {3, 3, 3, 3},  
 {3, 3, 3, 3} };  
 cout << "Matrix 3:" << endl;  
 printMatrix(mat3);  
  
// 4th Matrix  
 int mat4[size1][size2] = { {4, 4, 4, 4},  
 {4, 4, 4, 4},  
 {4, 4, 4, 4} };  
 cout << "Matrix 4:" << endl;  
 printMatrix(mat4);  
  
if(isIdentical(mat3, mat4))  
 {  
 cout << "Yes, the matrices are identical" << endl;  
 }  
 else  
 {  
 cout << "No, the matrices are not identical" << endl;  
 }  
 return 0;  
}

Выход программы:

Matrix 1:  
2 2 2 2   
2 2 2 2   
2 2 2 2   
Matrix 2:  
2 2 2 2   
2 2 2 2   
2 2 2 2   
Yes, the matrices are identical  
Matrix 3:  
3 3 3 3   
3 3 3 3   
3 3 3 3   
Matrix 4:  
4 4 4 4   
4 4 4 4   
4 4 4 4   
No, the matrices are not identical

Python

Оригинальная программа на Python:

# Python program to check if two matrices are identical  
  
# The order of the matrix is 3 x 4  
size1 = 3  
size2 = 4  
  
# Function to check if two matrices are identical  
def isIdentical(mat1, mat2):  
    for i in range(size1):  
        for j in range(size2):  
            if (mat1[i][j] != mat2[i][j]):  
                return False  
    return True  
  
# Function to print a matrix  
def printMatrix(mat):  
    for i in range(size1):  
        for j in range(size2):  
            print(mat[i][j], end=' ')  
        print()  
  
# Driver code  
# 1st Matrix  
mat1 = [ [2, 2, 2, 2],  
          [2, 2, 2, 2],  
          [2, 2, 2, 2] ]  
  
print("Matrix 1:")  
printMatrix(mat1)  
  
  
# 2nd Matrix  
mat2 = [ [2, 2, 2, 2],  
          [2, 2, 2, 2],  
          [2, 2, 2, 2] ]  
  
print("Matrix 2:")  
printMatrix(mat2)  
  
if (isIdentical(mat1, mat2)):  
    print("Yes, the matrices are identical")  
else:  
    print("No, the matrices are not identical")  
  
# 3rd Matrix  
mat3 = [ [3, 3, 3, 3],  
          [3, 3, 3, 3],  
          [3, 3, 3, 3] ]  
  
print("Matrix 3:")  
printMatrix(mat3)  
  
  
# 4th Matrix  
mat4 = [ [4, 4, 4, 4],  
          [4, 4, 4, 4],  
          [4, 4, 4, 4] ]  
  
print("Matrix 4:")  
printMatrix(mat4)  
  
if (isIdentical(mat3, mat4)):  
    print("Yes, the matrices are identical")  
else:  
    print("No, the matrices are not identical")  

Выход аналогичен примерам выше.

Примечание: в Python для числовых матриц можно использовать numpy.array_equal(mat1, mat2) — это будет компактнее и оптимизировано.

JavaScript

Оригинальная программа на JavaScript:

// JavaScript program to check if two matrices are identical  
  
// The order of the matrix is 3 x 4  
var size1 = 3;  
var size2 = 4;  
  
// Function to check if two matrices are identical  
function isIdentical(mat1, mat2) {  
 for (let i = 0; i < size1; i++)  
 {  
 for (let j = 0; j < size2; j++)  
 {  
 if (mat1[i][j] != mat2[i][j])  
 {  
 return false;  
 }  
 }  
 }  
 return true;  
}  
  
// Function to print a matrix  
function printMatrix(mat) {  
 for (let i = 0; i < size1; i++) {  
 for (let j = 0; j < size2; j++) {  
 document.write(mat[i][j] + " ");  
 }  
 document.write("  ");  
 }  
}  
  
// Driver code  
// 1st Matrix  
var mat1 = [ [2, 2, 2, 2],  
 [2, 2, 2, 2],  
 [2, 2, 2, 2] ];  
document.write("Matrix 1:" + "  ");  
printMatrix(mat1);  
  
  
// 2nd Matrix  
var mat2 = [ [2, 2, 2, 2],  
 [2, 2, 2, 2],  
 [2, 2, 2, 2] ];  
  
document.write("Matrix 2:" + "  ");  
printMatrix(mat2);  
  
if (isIdentical(mat1, mat2)) {  
 document.write("Yes, the matrices are identical" + "  ");  
} else{  
 document.write("No, the matrices are not identical" + "  ");  
}  
  
// 3rd Matrix  
var mat3 = [ [3, 3, 3, 3],  
 [3, 3, 3, 3],  
 [3, 3, 3, 3] ];  
  
document.write("Matrix 3:" + "  ");  
printMatrix(mat3);  
  
// 4th Matrix  
var mat4 = [ [4, 4, 4, 4],  
 [4, 4, 4, 4],  
 [4, 4, 4, 4] ];  
  
document.write("Matrix 4:" + "  ");  
printMatrix(mat4);  
  
if (isIdentical(mat3, mat4)) {  
 document.write("Yes, the matrices are identical" + "  ");  
} else{  
 document.write("No, the matrices are not identical" + "  ");  
}

В браузерной среде чаще используют консоль или DOM-методы для вывода. Для глубоких сравнений в Node.js можно сравнивать сериализованные строки JSON (для примера) или использовать специализированные сравнения.

C

Оригинальная программа на C:

// C program to check if two matrices are identical  
#include   
#include   
  
// The order of the matrix is 3 x 4  
#define size1 3  
#define size2 4  
  
// Function to check if two matrices are identical  
bool isIdentical(int mat1[][size2], int mat2[][size2])  
{  
 for (int i = 0; i < size1; i++)  
 {  
 for (int j = 0; j < size2; j++)  
 {  
 if (mat1[i][j] != mat2[i][j])  
 {  
 return false;  
 }  
 }  
 }  
 return true;  
}  
  
// Function to print a matrix  
void printMatrix(int mat[][size2])  
{  
 for (int i = 0; i < size1; i++)  
 {  
 for (int j = 0; j < size2; j++)  
 {  
 printf("%d ", mat[i][j]);  
 }  
 printf("\n");  
 }  
}  
  
// Driver code  
int main()  
{  
 // 1st Matrix  
 int mat1[size1][size2] = { {2, 2, 2, 2},  
 {2, 2, 2, 2},  
 {2, 2, 2, 2} };  
 printf("Matrix 1:\n");  
 printMatrix(mat1);  
  
// 2nd Matrix  
 int mat2[size1][size2] = { {2, 2, 2, 2},  
 {2, 2, 2, 2},  
 {2, 2, 2, 2} };  
 printf("Matrix 2:\n");  
 printMatrix(mat2);  
  
if(isIdentical(mat1, mat2))  
 {  
 printf("Yes, the matrices are identical \n");  
 }  
 else  
 {  
 printf("No, the matrices are not identical \n");  
 }  
  
// 3rd Matrix  
 int mat3[size1][size2] = { {3, 3, 3, 3},  
 {3, 3, 3, 3},  
 {3, 3, 3, 3} };  
 printf("Matrix 3: \n");  
 printMatrix(mat3);  
  
// 4th Matrix  
 int mat4[size1][size2] = { {4, 4, 4, 4},  
 {4, 4, 4, 4},  
 {4, 4, 4, 4} };  
 printf("Matrix 4: \n");  
 printMatrix(mat4);  
  
if(isIdentical(mat3, mat4))  
 {  
 printf("Yes, the matrices are identical \n");  
 }  
 else  
 {  
 printf("No, the matrices are not identical \n");  
 }  
  
return 0;  
}

Альтернативные подходы

  • Свернуть матрицы в одномерные массивы (flatten) и сравнить их функцией std::equal (C++), list comparison (Python) или сериализацией (JS). Это упрощает код, но требует аккуратности с форматом.
  • Для больших матриц можно вычислять контрольные суммы или хеши строк/блоков и сравнивать их сначала по хешу, затем по элементам при совпадении хешей.
  • Для NumPy: использовать numpy.array_equal — коротко и быстро.
  • Для разреженных матриц (sparse) сравнивать структуру и ненулевые элементы, а не полный плотный перебор.

Когда предложенный метод не годится

  • Числа с плавающей точкой: прямое сравнение может дать ложные результаты — используйте эпсилон.
  • Очень большие матрицы, которые не помещаются в память: потоковая обработка или блочный хеш лучше.
  • Разреженные представления: перебор всех ячеек будет неэффективен.
  • Если нужна инвариантность к перестановкам строк/столбцов или к транспонированию — обычное сравнение не подойдёт.

Важно: всегда сначала проверяйте размеры. Это быстрая и простая отбраковка.

Факты и сложность

  • Временная сложность: O(rows · cols).
  • Память: O(1) дополнительной памяти (в сравнении с матрицами).
  • Для разреженных матриц предпочтительна проверка структур и списков ненулевых элементов.

Критерии приёмки

  1. Два одинаковых массива одинаковых размеров → успешный проход, вывод “Yes…”.
  2. Матрицы разных размеров → сразу “No…”.
  3. Матрицы одинаковых размеров, различие в раннем элементе → быстрое прекращение работы и “No…”.
  4. Матрицы различаются только в последнем элементе → полный перебор и “No…”.
  5. Сравнение чисел с плавающей точкой должно учитывать eps.

Тест-кейсы (коротко)

  • Малые матрицы 1×1: equal / not equal.
  • Одинаковые матрицы 3×4 (как в примерах).
  • Одинаковые размеры, различие в середине.
  • Разные размеры: 2×3 vs 3×2.
  • Плавающие числа: 0.1+0.2 против 0.3 с eps.

Чек-лист для разработчика

  • Проверить, что размеры одинаковы.
  • Выбрать подходящую стратегию сравнения (плотная / разреженная).
  • Для float — установить значение eps и использовать сравнение по модулю.
  • Добавить тесты: ранний выход, поздний выход, разные размеры.
  • Проводить профилирование для больших матриц (при необходимости — перейти на блочный/параллельный алгоритм).

Короткий глоссарий

  • Матрица — двумерная таблица чисел, индексируемая по строкам и столбцам.
  • Идентичность матриц — совпадение размеров и всех соответствующих элементов.
  • Эпсилон (eps) — допустимая погрешность при сравнении чисел с плавающей точкой.

Вывод

Проверка идентичности двух матриц — простая и надёжная операция: сначала сравнивают размеры, затем элементы в двух вложенных циклах. В большинстве практических случаев этого достаточно; для особых нужд (float, разреженные или очень большие матрицы) применяют адаптации: сравнение с эпсилон, хеширование или специальные представления.

Примечание: постоянно держите тесты для раннего и позднего расхождения — это помогает ловить ошибки в реализации.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство