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

Проверка идентичности двух матриц в 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
Автор
Редакция

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

Пересылка почты Outlook ↔ Gmail: полное руководство
Почта

Пересылка почты Outlook ↔ Gmail: полное руководство

Как узнать, что пора менять батарейку AirTag
Гаджеты

Как узнать, что пора менять батарейку AirTag

Как удалить устройства из Google Home
Умный дом

Как удалить устройства из Google Home

Вернуть «Open command window here» в Windows 11
Windows

Вернуть «Open command window here» в Windows 11

Подключение Bluetooth-наушников к Wear OS
Гаджеты

Подключение Bluetooth-наушников к Wear OS

Запустить успешную страницу на Patreon
Монетизация

Запустить успешную страницу на Patreon