Top Banner
SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.
52

SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

Jan 01, 2016

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

SNUIDB Lab.

Ch8. Arrays and Matrices

© copyright 2006 SNU IDB Lab.

Page 2: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

2SNUIDB Lab.Data Structures

Bird’s-Eye View In practice, data are often in tabular form

Arrays are the most natural way to represent it Want to reduce both the space and time requirements by

using a customized representation This chapter

Representation of a multidimensional array Row major and column major representation

Develop the class Matrix Represent two-dimensional array Indexed beginning at 1 rather than 0 Support operations such as add, multiply, and transpose

Introduce matrices with special structures Diagonal, triangular, and symmetric matrices Sparse matrix

Page 3: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

3SNUIDB Lab.Data Structures

Table of Contents

Arrays Matrices Special Matrices Sparse Matrices

Page 4: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

4SNUIDB Lab.Data Structures

The Abstract Data Type: Array

AbstractDataType Array{ instances set of (index, value) pairs, no two pairs have the same index operations get(index) : return the value of the pair with this index set(index, value) : add this pair to set of pairs, overwrite existing one (if any) with the same index}

Page 5: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

5SNUIDB Lab.Data Structures

Indexing a Java Array Arrays are a standard data structure in Java

The index (subscript) of an array in Java [i1] [i2] [i3]… [ik]

Creating a 3-dimensional array score int [][][] score = new int [u1][u2] [u3]

Java initializes every element of an array to the default value for the data type of the array’s components

Primitive data types vs. User-defined data types

Page 6: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

6SNUIDB Lab.Data Structures

1-D Array Representation

Similar in C, C++, Java 1-dimensional array x = [a, b, c, d]

X[0], X[1], X[2], X[3] Map into contiguous memory locations location(x[i]) = start + i

Space overhead of array declaration 4 bytes for start + 4 bytes for x.length = 8 bytes Excluding space needed for the elements of x

Memory

a b c d

start

Page 7: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

7SNUIDB Lab.Data Structures

2-D Arrays The elements of a 2-dimensional array “a” declared

as int [][] a = new int[3][4];

May be shown as tablea[0][0] a[0][1] a[0][2] a[0][3]a[1][0] a[1][1] a[1][2] a[1][3]a[2][0] a[2][1] a[2][2] a[2][3]

a[0][0] a[0][1] a[0][2] a[0][3] row 0a[1][0] a[1][1] a[1][2] a[1][3] row 1a[2][0] a[2][1] a[2][2] a[2][3] row 2

column 0 column 1 column 2 column 3

Page 8: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

8SNUIDB Lab.Data Structures

“Array of arrays” Representation (1)

Same in Java, C, and C++ 2D array is represented as a 1D array

The 1D array’s each element is, itself, a 1D array int [][] x = new int[3][5]

A 1D array “x” (length 3) Each element of x is a 1D array (length 5)

x[0]

x[1]

x[2]

[0][1][2] [3] [4]

Page 9: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

9SNUIDB Lab.Data Structures

“Array of arrays” Representation (2)

2-D array x[][]a, b, c, de, f, g, hi, j, k, l

View 2-D array as 1-D arrays of rows x = [row0, row1, row2]row 0 = [a, b, c, d]row 1 = [e, f, g, h]row 2 = [i, j, k, l]

So, require contiguous memory of size 3, 4, 4, and 4 respectively

a b c d

e f g h

i j k l

x[]

Page 10: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

10SNUIDB Lab.Data Structures

“Array of arrays” representation (3)

Space overhead for array declaration = overhead for 4 1-D arrays = (num of rows + 1) x (start pointer + length variable) = 4 * 8 bytes = 32 bytes

a b c d

e f g h

i j k l

x[]

Page 11: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

11SNUIDB Lab.Data Structures

Covert 2D Array into 1D Array through Row-Major Mapping (1)

Example 3 x 4 arraya, b, c, de, f, g, hi, j, k, l

Convert into 1-D array y by collecting elements by rows Within a row elements are collected from left to right Rows are collected from top to bottom We get y[] = {a, b, c, d, e, f, g, h, i, j, k, l}

row 0 row 1 row 2 … row i

Page 12: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

12SNUIDB Lab.Data Structures

Locating Element x[i][j]

Assume x has r rows and c columns Each row has c elements There are i rows to the left of row i starting with x[i][0] So i * c elements to the left of x[i][0]

So x[i][j] is mapped to position of i * c + j of the 1D array Ex: In the previous slide, c = 4: then x[2][3] 2*4 + 3 11th

element of 1D array

row 0 row 1 row 2 … row i

Covert 2D Array into 1D Array through Row-Major Mapping (2)

Page 13: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

13SNUIDB Lab.Data Structures

Space Overhead for 2D array Assume x has r rows and c columns 4 bytes for start + 4 bytes for length + 4 bytes for c = 12 bytes number of rows r = length / c Total space for 1D array: 12 + length

Disadvantage: should have contiguous memory of size length

row 0 row 1 row 2 … row iStartLength: length of 1D arrayC: number of columns

Covert 2D Array into 1D Array through Row-Major Mapping (3)

Page 14: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

14SNUIDB Lab.Data Structures

a, b, c, de, f, g, hi, j, k, l

Convert into 1D array y by collecting elements by columns

Within a column elements are collected from top to bottom

Columns are collected from left to right We get y = {a, e, i, b, f, j, c, g, k, d, h, l}

Covert 2D Array into 1D Array through Column-Major Mapping

Page 15: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

15SNUIDB Lab.Data Structures

Irregular 2D Arrays Arrays with two or more rows that have a different number of

elements Size[i] for i (i is the row number)

a b c d

e f g

i j k l

x[]

h kX[0] = new int [6]

X[1] = new int [3]

X[2] = new int [5]

Page 16: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

16SNUIDB Lab.Data Structures

Creating an Irregular 2D Array

public static void main(String[] args){ int numofRows = 5; int [] size = (6,3,4,2,7) // declare a 2D array variable and allocate the desired number of rows int [][] irregularArray = new int [numOfRows][]; // now allocate space for the elements in each row for (int i = 0; i < numOfRows; i++) irregularArray[i] = new int [size[i]]; // use the array like any regular array irregularArray[2][3] = 5; irregularArray[4][6] = irregularArray[2][3] + 2; irregularArray[1][1] += 3;….}

Page 17: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

17SNUIDB Lab.Data Structures

Table of Contents

Arrays Matrices Special Matrices Sparse Matrices

Page 18: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

18SNUIDB Lab.Data Structures

Matrix Table of values

has as rows and columns like 2-D array but numbering begins at 1 rather than 0

a b c d row 1e f g h row 2i j k l row 3

Use notation x(i, j) rather than x[i][j] Sometimes, we may use Java’s 2-D array or Vector to

represent a matrix

Page 19: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

19SNUIDB Lab.Data Structures

Java 2D Array or Vector for a Matrix Java 2D Array

A[0,*] and A[*,0] of 2D array cannot be used No support matrix operations such as add, transpose, multiply…. x and y are 2D arrays, we cannot do x + y, x – y, x * y, etc. directly in java

Java Vector for 3X3 matrixVector matrix_a = new Vector (3);Vector row_a = new Vector(3); row_a.addElement(“a”); row_a.addElement(“b”); row_a.addElement(“c ”);Vector row_b = new Vector(3); row_a.addElement(“d”); row_a.addElement(“e”); row_a.addElement(“f”);Vector row_c = new Vector(3); row_a.addElement(“g”); row_a.addElement(“h”); row_a.addElement(“i”);matrix_a.addElement(row_a); matrix_a.addElement(row_b);matrix_a.addElement(row_c)

No matrix operations

So, need to develop a class Matrix for object-oriented support of all matrix operations

Page 20: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

20SNUIDB Lab.Data Structures

The Class Matrix Uses 1-D array “element” to store a matrix in row-major order The CloneableObject interface has clone() and copy()

public class Matrix implements CloneableObject {int rows, cols; // matrix dimensionsObject [] element; // element array

public Matrix(int theRows, int theColumns) {rows = theRows;

cols = theColumns;element = new Object [ rows * cols];

}}

Page 21: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

21SNUIDB Lab.Data Structures

clone() & copy() of Matrixpublic Object clone() { // return a clone of the matrix

Matrix x = new Matrix(rows, cols);for (int i=0; i < rows * cols; i++)

x.element[i] = ((CloneableObject) element[i]).clone();return x;

}public void copy (Matrix m) { // copy the references in m into this

if (this != m) {rows = m.rows;

cols = m.cols;element = new Object[rows * cols];for (int i=0; i < rows * cols; i++)

element[i] = m.element[i]; // copy each reference}

}

Page 22: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

22SNUIDB Lab.Data Structures

clone() & copy() exampleMatrix x = new Matrix(2, 2);for (int i=0; i < rows * cols; i++) x.element[i] = new Integer(i);

// x = [0][1] // [2][3]

Matrix y = x.clone(); // y = [0][1] // [2][3]================================================

==Matrix x = new Matrix(2, 2);

Matrix y = new Matrix(2, 2);for (int i=0; i < rows * cols; i++) x.element[i] = new Integer(i*2);

// x = [0][2] // [4][6] y.copy(x); // change y's member variables to make y same as x // y = [0][2] // [4][6]}

Page 23: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

23SNUIDB Lab.Data Structures

get() & set() of Matrix/**@return the element this[i, j] * @throws IndexOutOfBoundsException when i or j invalid */public Object get (int i, int j) { checkIndex(i, j); // validate index

return element[(i – 1) * cols + j -1];}

/**set this(i, j) = newValue * @throws IndexOutOfBoundsException when i or j invalid */public void set (int i, int j, Object newValue) {

checkIndex(i, j);element[(i – 1) * cols + j – 1] = newValue;

}

Page 24: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

24SNUIDB Lab.Data Structures

add() of Matrix/**@return the this + m * @throws IllegalArgumentException when matrices are incomputible

*/public Matrix add (Matrix m) {

if (rows != m.rows || cols != m.cols)throw new IllegalArgumentException(“Imcompatible”);

// create result matrix wMatrix w = new Matrix(rows, cols);int numberOfTerms = rows * cols;for ( int i=0; i < numberOfTerms; i++)

w.element[i] = ((Computable) element[i]).add(m.element[i]));return w;

}

Page 25: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

25SNUIDB Lab.Data Structures

Complexity of Matrix operations

Constructor: 0(rows * cols)

Clone(), Copy(), Add(): 0(rows * cols)

Multiply(): 0(this.row * this.cols * m.cols)

Program 8.6 at pp 270

Page 26: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

26SNUIDB Lab.Data Structures

Table of Contents

Arrays Matrices Special Matrices Sparse Matrices

Page 27: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

27SNUIDB Lab.Data Structures

Special Matrix Definitions Diagonal Matrix M(i, j) = 0 for i = j

Tridiagonal Matrix M(i, j) = 0 for |i – j| > 1

Lower Triangular Matrix M(i, j) = 0 for i < j

Upper Triangular Matrix M(i, j) = 0 for i > j

Symmetric Matrix M(i, j) = M(j, i) for all i, j

Page 28: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

28SNUIDB Lab.Data Structures

Diagonal Matrix

An n x n matrix in which all nonzero terms are on the diagonal x(i, j) is on diagonal iff i = j Number of diagonal elements in an n x n matrix is n Non diagonal elements are zero Store diagonal only vs store n2 whole

1 0 0 00 2 0 00 0 3 00 0 0 4

Page 29: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

29SNUIDB Lab.Data Structures

The Class DiagonalMatrixpublic class DiagonalMatrix {

int rows; // matrix dimension (no cols!)Object zero; // zero elementObject [] element; // element array

public DiagonalMatrix (int theRows, Object theZero) {if (theRow < 1) throw new IllegalArgumentException(“row

>0”);rows = theRows;zero = theZero;for (int i=0; i<rows; i++)

element[i] = zero; //construct only the diagonal elements}

}

Page 30: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

30SNUIDB Lab.Data Structures

get() and set() for DiagonalMatrix

public Object get (int i, int j) {checkIndex(i, j); // validate indexif (i == j) return element[i – 1]; // return only the diagonal elementelse return zero; // nondiagonal element

}

public void set (int i, int j, Object newValue) {if (i == j) element[i – 1] = newValue; // save only the diagonal elementelse // nondiagonal element, newValue must be zero

if (!((Zero)newValue).equalsZero()) throw new IllegalArgumenetException(“must be zero”);

}

Page 31: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

31SNUIDB Lab.Data Structures

Tridiagonal Matrix The nonzero elements lie on only the 3 diagonals

Main diagonal: M(i, j) where i = j Diagonal below main diagonal: M(i, j) where i = j + 1 Diagonal above main diagonal: M(i, j) where j = j - 1

1 1 0 0 0 02 2 2 0 0 00 3 3 3 0 00 0 4 4 4 00 0 0 5 5 50 0 0 0 6 6

Page 32: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

32SNUIDB Lab.Data Structures

Lower Triangular Matrix (LTM)

An n x n matrix in which all nonzero terms are either on or below the diagonal.

1 0 0 02 3 0 04 5 6 07 8 9 10

x(i, j) is part of lower triangular iff i >= j Number of elements in lower triangle: 1+ 2+ 3+ … + n =

n*(n+1) / 2 Store only the lower triangle

Page 33: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

33SNUIDB Lab.Data Structures

“Array of Arrays” Representation of LTM

Use an irregular 2D array lengths of rows are not required to be the same

1

2 3

4 5 6

x[]

7 8 9 l0

Page 34: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

34SNUIDB Lab.Data Structures

1D Array representation of LTM (1)

Use row-major order, but omit terms that are not part of the lower triangle

For the matrix 1 0 0 0

2 3 0 0 4 5 6 0 7 8 9 10

We get 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

How we can locate X[2][3]?

Page 35: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

35SNUIDB Lab.Data Structures

1D Array representation of LTM (2)

Index of Element[i][j] Order is: row 1, row 2, row 3, … Row i is preceded by rows 1, 2, …, i-1 Size of row i is i

Number of elements that precede row i is 1 + 2 + 3 + … + (i-1) = i * (i-1)/2

So element (i,j) is at position i * (i-1)/2 + j - 1 of the 1D array

Page 36: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

36SNUIDB Lab.Data Structures

Table of Contents

Arrays Matrices Special Matrices Sparse Matrices

Page 37: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

37SNUIDB Lab.Data Structures

Sparse Matrices Sparse matrix Many elements are zero Dense matrix Few elements are zero

The boundary between a dense and a sparse matrix is not precisely defined

Structured sparse matrices Diagonal matrix Tridiagonal matrix Lower triangular matrix

May be mapped into a 1D array so that a mapping function can be used to locate an element

Page 38: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

38SNUIDB Lab.Data Structures

Unstructured Sparse Matrices (USM) (1)

Airline flight matrix: Aflight(n, n) airports are numbered 1 through n (say 1000 airports) Aflight(i, j) = list of nonstop flights from airport i to airport j 1000 x 1000 array of list references (4 bytes) to nonstop

flight lists need 4,000,000 bytes (4G)

However, only total number of flights = 20,000 (say) need at most 20,000 list references at most 80,000 bytes

(80M)

We need an economic representation!

Page 39: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

39SNUIDB Lab.Data Structures

Unstructured Sparse Matrices (USM) (2)

Web page matrix: WEBPM(n, n) Millions of trillions of web pages (numbered 1 through n) WEBPM(i, j) = number of links from page i to page j The number of links is very very smaller than the number of web

pages

Web analysis authority page: page that has many links to it hub page: page having links to many authority pages

Facts of Web Links Roughly n = 2 billion pages (and growing by 1 million pages a day) n x n array of ints 16 * 1018 bytes (= 16 * 109 GB) Each page links to 10 (say) other pages on average

On average there are 10 nonzero entries per row 20 billion links Space needed for nonzero elements is approximately 20 billion x 4

bytes = 80 billion bytes (= 80 GB)

Page 40: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

40SNUIDB Lab.Data Structures

Representation of USM Conceptualized into linear list in row-major order

Scan the nonzero elements of the sparse matrix in row-major order

Each nonzero element is represented by a triple (row, column, value)

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

Page 41: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

41SNUIDB Lab.Data Structures

Implementations of USM Naive Implementation of USM

Do not consider numerous elements having 0 Java 2D array

Implementation Methods after conceptualizing Linear List Array Linked List (Chain) Orthogonal List

Page 42: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

42SNUIDB Lab.Data Structures

USM implementation using Array Linear List

row 1 1 2 2 4 4

list = column 3 5 3 4 2 3

value 3 4 5 7 2 6 element[] 0 1 2 3 4 5

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 00 0 0 0 00 2 6 0 0

Page 43: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

43SNUIDB Lab.Data Structures

USM Implementation through Chain -- 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)]

• USM may be viewed as “array of linear list” Synonym: Array of row chains

Page 44: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

44SNUIDB Lab.Data Structures

USM implementation using Array of Row Chains

0 0 3 0 4

0 0 5 7 0

0 0 0 0 0

0 2 6 0 0 row[]

33

null 45

53

null 74

22

null 63

null

next

valuecol

Page 45: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

45SNUIDB Lab.Data Structures

USM implementation using Orthogonal Lists

Both row and column lists More expensive than array of row chains More complicated implementation Not much advantage! Node structure

row col

nextdown

value

Page 46: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

46SNUIDB Lab.Data Structures

Row Lists

0 0 3 0 4

0 0 5 7 0

0 0 0 0 0

0 2 6 0 0

null

1 3 3 1 5 4

2 3 5 2 4 7

4 2 2 4 3 6

n

n

n

row list[]

Page 47: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

47SNUIDB Lab.Data Structures

Column Lists

0 0 3 0 4

0 0 5 7 00 0 0 0 00 2 6 0 0

1 3 3 1 5 4

2 3 5 2 4 7

4 2 2 4 3 6

n

nn

column list[]

Page 48: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

48SNUIDB Lab.Data Structures

Orthogonal Lists

0 0 3 0 4

0 0 5 7 0

0 0 0 0 0

0 2 6 0 0

null

1 3 3 1 5 4

2 3 5 2 4 7

4 2 2 4 3 6

n n

n

nnn

column list[]

row list[]

Page 49: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

49SNUIDB Lab.Data Structures

Approximate Memory Requirements

500 x 500 matrix with 1994 nonzero elements Java 2D array: 500 x 500 x 4 bytes = 1G bytes Single Array Linear List: 3 x 4 bytes X 1994 = 23,928 =

24M bytes One Chain Per Row: 23928 + 500 x 4 = 25,928 = 26M bytes Orthogonal List: your job!

row[]

element[] 0 1 2 3 4 5

row 1 1 2 2 4 4

column 3 5 3 4 2 3

value 3 4 5 7 2 6

33

null 45

Page 50: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

50SNUIDB Lab.Data Structures

Performance of Sparse Matrix implementations

Matrix Transpose() with 500 x 500 matrix with 1994 nonzero elements

Java 2D array 210 ms Array Linear List 6 ms One Chain Per Row 12 ms

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

Java 2D array 880 ms Array Linear List 18 ms One Chain Per Row 29 ms

Page 51: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

51SNUIDB Lab.Data Structures

Summary In practice, data are often in tabular form

Arrays are the most natural way to represent it Reduce both the space and time requirements by using a

customized representation

This chapter Representation of a multidimensional array

Row major and column major representation Develop the class Matrix

Represent two-dimensional array Indexed beginning at 1 rather than 0 Support operations such as add, multiply, and transpose

Introduce matrices with special structures Diagonal, triangular, and symmetric matrices Sparse matrix

Page 52: SNU IDB Lab. Ch8. Arrays and Matrices © copyright 2006 SNU IDB Lab.

52SNUIDB Lab.Data Structures

JDK class: javax.vecmath.GMatrix

public class Gmatrix {

constructors

GMatrix(int nRow, int nCol): Constructs an array of size nRow*nCol

methods

void add(GMatrix m1): Adds m1 to the matrix

void sub(GMatrix m1): Subtracts m1 from the matrix

void mul(GMatrix m1): Multiplies m1 to the matrix

void negate(): Negates the matrix

void transpose(): Transposes the matrix

void invert(): Inverts the matrix

double trace(): Returns the trace of the matrix

}