An m by n matrix A contains nm elements in it. For
,
, A[i,j] is the (i,j)th element of matrix
A.
Let b be a 1 by m matrix (a row vector). The product of b
and A is a 1 by n row vector c such that
. It is the dot product between b and the columns of A.
The transpose of a m by n matrix A is a n by m matrix
such that
. We've exchanged rows and
columns.
The product of two matrices A (m by n) and B (n by p)
is a matrix C (m by p) where
.
Note that this is most often computed using a simple triply nested
loop.
In many applications, we need to manipulate sparse
matrices. These are matrices that consist of many zeros and very few
non-zero elements. Instead of taking m n space to represent a
matrix A with l non-zero elements, we can represent it using
space using three vectors: for
,
is the column of non-zero element i,
is its row, and
is its value. For ease of computation, we require that
if
. Further, if
, then
. This means that the non-zero elements are sorted
by column, then by row within column.
Given an m by n matrix A, we can convert it to the sparse
representation in time
. (Simply read across the rows
one at a time, creating an entry in the sparse matrix format for each
non-zero encountered.) Given a sparse matrix A with l non-zero
elements, we can convert it to a standard (dense) matrix starting from
a matrix of all zeros in
time. (Simply assign
for each
.)
Describe an algorithm for each of these problems. Provide an analysis for the number of primitive operations they take. Make your analyses as tight as possible.