Какова сложность сложения матрицы?
Я нашел некоторые упоминания в другом вопросе о добавлении матрицы являются квадратичной операцией. Но я думаю, что это линейный.
Если я удваиваю размер матрицы, мне нужно вычислить двойные дополнения, а не четверные.
основной точкой расхождения, по-видимому, является размер проблемы. Для меня это число элементов в матрице. Другие думают, что это количество столбцов или строк, следовательно,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 сложений