2009-12-08 3 views
9

Я нашел some mentions in another question of matrix addition being a quadratic operation. Но я думаю, что он линейный.Какова сложность добавления матрицы?

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

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

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

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

+1

Вы удваиваете общее количество элементов в матрице или каждом измерении матрицы? – Andres

+0

Почему downvote? Является ли этот вопрос неясным или не полезным? –

+0

nice question :) – dfa

ответ

8

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

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

+0

+1 Для упоминания аппаратного распараллеливания – Andres

+8

Аппаратное обеспечение не изменит асимптотической сложности. Он может выполнять дополнительные добавления сразу, но вы не можете добавить две матрицы с меньшими дополнениями, чем элементы в них. Это распространенное заблуждение, особенно при многопоточности. Тот факт, что это быстрее, не означает, что асимптотическая сложность меньше. –

+0

Это то, что я получаю, слишком много думая слишком поздно. Почему оба представления не могут быть правильными? Теперь я чувствую себя таким глупым. –

4

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

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

2

думать о реализации в общем случае:

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

если мы возьмем простую квадратную матрицу, то есть NxN дополнение

2

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

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

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

+0

Все операции в * плотных * матрицах, разреженные операции матрицы ограничены ненулевыми элементами. – akuhn

+0

@Adrian: Touche ... не думал о разреженных/полосатых/иначе структурированных матрицах здесь. –

Смежные вопросы