Какова сложность сложения матрицы?

Я нашел некоторые упоминания в другом вопросе о добавлении матрицы являются квадратичной операцией. Но я думаю, что это линейный.

Если я удваиваю размер матрицы, мне нужно вычислить двойные дополнения, а не четверные.

основной точкой расхождения, по-видимому, является размер проблемы. Для меня это число элементов в матрице. Другие думают, что это количество столбцов или строк, следовательно,O(n^2) сложность.

еще одна проблема, с которой я рассматриваю ее как квадратичную операцию, заключается в том, что это означает, что добавление 3-мерных матриц является кубическим, а добавление 4-мерных матриц -O(n^4) и т. д., Хотя все эти проблемы могут быть сведены к задаче добавления двух векторов, которая имеет явно линейное решение.

Я прав или нет? Если нет, то почему?

4 ответов


Как вы уже отметили, это зависит от вашего определения размера проблема: это общее количество элементов, или ширина/высота матрицы. Что всегда правильно, на самом деле зависит от большей проблемы, частью которой является добавление матрицы.

NB:на некоторых аппаратных средствах (GPU, векторные машины и т. д.) добавление может работать быстрее, чем ожидалось (хотя сложность по-прежнему одинакова, см. обсуждение ниже), потому что оборудование может выполнять несколько дополнений в один шаг. Для ограниченного размера задачи (например, n


Это O (M*N) для 2-мерной матрицы с M строками и N столбцами.

или вы можете сказать, что это O(L), где L-общее число элементов.


обычно задача определяется с помощью квадратных матриц "размера N", что означает NxN. По этому определению добавление матрицы является O (N^2), так как вы должны посетить каждый из элементов NxN ровно один раз.

по тому же определению умножение матрицы(с использованием квадратных матриц NxN) равно O (N^3), потому что вам нужно посетить N элементов в каждой из исходных матриц для вычисления каждого из элементов NxN в матрице продукта.

Как правило, все операции матрицы имеют нижнюю границу O (n^2) просто потому, что вы должны посетить каждый элемент хотя бы один раз, чтобы вычислить что-либо, связанное со всей матрицей.


подумайте о реализации общего случая:

for 1 : n
 for 1 : m
   c[i][j] = a[i][j] + b[i][j]

если взять простую квадратную матрицу, то есть n x n сложений