Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Sparse Matrices: Matrix Table of Values

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 19

Sparse Matrices

Matrix table of values



Sparse Matrices
Matrix table of values


0 0 3 0 4
0 0 5 7 0
0 0 0 0 0
0 2 6 0 0
Row 2
Column 4
4 x 5 matrix
4 rows
5 columns
20 elements
6 nonzero elements
Sparse Matrices
Sparse matrix #nonzero elements/#elements
is small.
Examples:
Diagonal
Only elements along diagonal may be nonzero
n x n matrix ratio is n/n
2
= 1/n
Tridiagonal
Only elements on 3 central diagonals may be nonzero
Ratio is (3n-2)/n
2
= 3/n 2/n
2
Sparse Matrices
Lower triangular (?)
Only elements on or below diagonal may be nonzero
Ratio is n(n+1)(2n
2
) ~ 0.5

These are structured sparse matrices. Nonzero
elements are in a well-defined portion of the
matrix.
Sparse Matrices
An n x n matrix may be stored as an n x n array.
This takes O(n
2
) space.
The example structured sparse matrices may be
mapped into a 1D array so that a mapping
function can be used to locate an element
quickly; the space required by the 1D array is
less than that required by an n x n array (next
lecture).
Unstructured Sparse Matrices
Airline flight matrix.
airports are numbered 1 through n
flight(i,j) = list of nonstop flights from airport i
to airport j
n = 1000 (say)
n x n array of list pointers => 4 million bytes
total number of nonempty flight lists = 20,000
(say)
need at most 20,000 list pointers => at most
80,000 bytes
Unstructured Sparse Matrices
Web page matrix.
web pages are numbered 1 through n
web(i,j) = number of links from page i to page j

Web analysis.
authority page page that has many links to it
hub page links to many authority pages
Web Page Matrix
n = 2 billion (and growing by 1 million a day)
n x n array of ints => 16 * 10
18
bytes (16 * 10
9

GB)
each page links to 10 (say) other pages on
average
on average there are 10 nonzero entries per row
space needed for nonzero elements is
approximately 20 billion x 4 bytes = 80 billion
bytes (80 GB)
Representation Of Unstructured
Sparse Matrices
Single linear list in row-major order.
scan the nonzero elements of the sparse matrix in row-
major order (i.e., scan the rows left to right
beginning with row 1 and picking up the nonzero
elements)
each nonzero element is represented by a triple
(row, column, value)
the list of triples is stored in a 1D array
Single Linear List Example


0 0 3 0 4
0 0 5 7 0
0 0 0 0 0
0 2 6 0 0
list =
row 1 1 2 2 4 4
column 3 5 3 4 2 3
value 3 4 5 7 2 6
One Linear List Per Row

0 0 3 0 4
0 0 5 7 0
0 0 0 0 0
0 2 6 0 0

row1 = [(3, 3), (5,4)]
row2 = [(3,5), (4,7)]
row3 = []
row4 = [(2,2), (3,6)]
Single Linear List
Array representation
1D Array of triples of type term
int row, col, value
Size of 1D array generally not predictable at
time of initialization.
Start with some default capacity/size (say 10)
Increase capacity as needed
Use REALLOC
Approximate Memory Requirements

500 x 500 matrix with 1994 nonzero elements, 4
bytes per element

2D array 500 x 500 x 4 = 1million bytes
1D array of triples 3 x 1994 x 4
= 23,928 bytes

Matrix Transpose


0 0 3 0 4
0 0 5 7 0
0 0 0 0 0
0 2 6 0 0


0 0 0 0
0 0 0 2
3 5 0 6
0 7 0 0
4 0 0 0
Matrix Transpose
2 3 3 3 4 5
4 1 2 4 2 1
2 3 5 6 7 4

row 1 1 2 2 4 4
column 3 5 3 4 2 3
value 3 4 5 7 2 6


0 0 3 0 4
0 0 5 7 0
0 0 0 0 0
0 2 6 0 0


0 0 0 0
0 0 0 2
3 5 0 6
0 7 0 0
4 0 0 0
Matrix Transpose

row 1 1 2 2 4 4
column 3 5 3 4 2 3
value 3 4 5 7 2 6


0 0 3 0 4
0 0 5 7 0
0 0 0 0 0
0 2 6 0 0


0 0 0 0
0 0 0 2
3 5 0 6
0 7 0 0
4 0 0 0
Step 1: #nonzero in each row of transpose.
= #nonzero in each column of
original matrix
= [0, 1, 3, 1, 1]
Step2: Start of each row of transpose
= sum of size of preceding rows of
transpose
= [0, 0, 1, 4, 5]
Step 3: Move elements, left to right, from
original list to transpose list.

Matrix Transpose
Step 1: #nonzero in each row of transpose.
= #nonzero in each column of
original matrix
= [0, 1, 3, 1, 1]
Step2: Start of each row of transpose
= sum of size of preceding rows of
transpose
= [0, 0, 1, 4, 5]
Step 3: Move elements, left to right, from
original list to transpose list.

Complexity
m x n original matrix
t nonzero elements
Step 1: O(n+t)
Step 2: O(n)
Step 3: O(t)
Overall O(n+t)

Runtime Performance
Matrix Transpose
500 x 500 matrix with 1994 nonzero elements
Run time measured on a 300MHz Pentium II PC

2D array 210 ms
SparseMatrix 6 ms

Performance
Matrix Addition.
500 x 500 matrices with 1994 and 999 nonzero
elements

2D array 880 ms
SparseMatrix 18 ms

You might also like