0% found this document useful (0 votes)
13 views

Lecture4 Arrays

Uploaded by

ncvlabecb
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views

Lecture4 Arrays

Uploaded by

ncvlabecb
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 24

Arrays and Matrices

CSE, POSTECH
Introduction
 Data is often available in tabular form
 Tabular data is often represented in arrays
 Matrix is an example of tabular data and is often
represented as a 2-dimensional array
– Matrices are normally indexed beginning at 1 rather
than 0
– Matrices also support operations such as add, multiply,
and transpose, which are NOT supported by C++’s 2D
array

2
Introduction
 It is possible to reduce time and space using a
customized representation of multidimensional
arrays
 This chapter focuses on
– Row- and column-major mapping and representations of
multidimensional arrays
– the class Matrix
– Special matrices
 Diagonal, tridiagonal, triangular, symmetric, sparse

3
1D Array Representation in C++

Memory

a b c d

start
 1-dimensional array x = [a, b, c, d]
 map into contiguous memory locations
 location(x[i]) = start + i
Space Overhead

Memory

a b c d

start

space overhead = 4 bytes for start


(excludes space needed for the elements of x)
2D Arrays

The elements of a 2-dimensional array a declared as:


int a[3][4];

may be shown as a table


a[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]
Rows of a 2D Array

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


a[1][0] a[1][1] a[1][2] a[1][3] row 1
a[2][0] a[2][1] a[2][2] a[2][3] row 2
Columns of a 2D Array

a[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]

column 0 column 1 column 2 column 3


2D Array Representation in C++
2-dimensional array x
a, b, c, d
e, f, g, h
i, j, k, l
view 2D array as a 1D array of rows
x = [row0, row1, row 2]
row 0 = [a, b, c, d]
row 1 = [e, f, g, h]
row 2 = [i, j, k, l]
and store as 4 1D arrays
2D Array Representation in C++
x[]

a b c d
4 separate
e f g h
1-dimensional arrays
i j k l

 space overhead = overhead for 4 1D arrays


= 4 * 4 bytes
= 16 bytes
= (number of rows + 1) x 4 bytes
Array Representation in C++
x[]

a b c d

e f g h

i j k l

 This representation is called the array-of-arrays


representation.
 Requires contiguous memory of size 3, 4, 4, and 4 for the 4
1D arrays.
 1 memory block of size number of rows and number of rows
blocks of size number of columns
Row-Major Mapping
 Example 3 x 4 array:
abcd
efgh
i jkl
 Convert into 1D 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


Locating Element x[i][j]
0 c 2c 3c ic

row 0 row 1 row 2 … row i

 assume x has r rows and c columns


 each row has c elements
 i rows to the left of row i
 so ic elements to the left of x[i][0]
 x[i][j] is mapped to position
ic + j of the 1D array
Space Overhead

row 0 row 1 row 2 … row i

4 bytes for start of 1D array +


4 bytes for c (number of columns)
= 8 bytes

Note that we need contiguous memory of size rc.


Column-Major Mapping
abcd
efgh
i jkl
 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}
Row- and Column-Major Mappings
2D Array int a[3][6];
a[0][0] a[0][1] a[0][2] a[0][3] a[0][4] a[0][5]
a[1][0] a[1][1] a[1][2] a[1][3] a[1][4] a[1][5]
a[2][0] a[2][1] a[2][2] a[2][3] a[2][4] a[2][5]

16
Row- and Column-Major Mappings
 Row-major order mapping functions
map(i1,i2) = i1u2+i2 for 2D arrays
map(i1,i2,i3) = i1u2u3+i2u3+i3 for 3D arrays

 What is the mapping function for Figure 7.2(a)?


map(i1,i2) = 6i1+i2
map(2,3) = ?

 Column-major order mapping functions


// do this as an exercise
17
Irregular 2D Arrays

x[]

2 3

4 5 6

7 8 9 l0

Irregular 2-D array: the length of rows is not required


to be the same.
Creating and Using Irregular 2D Arrays
// declare a two-dimensional array variable
// and allocate the desired number of rows
int ** irregularArray = new int*[numberOfRows];
// now allocate space for elements in each row
for (int i = 0; i < numberOfRows; i++)
irregularArray[i] = new int [length[i]];
// use the array like any regular array
irregularArray[2][3] = 5;
irregularArray[4][6] = irregularArray[2][3]+2;
irregularArray[1][1] += 3;
Matrices
 m x n matrix is a table with m rows and n columns.
 M(i,j) denotes the element in row i and column j.
 Common matrix operations
– transpose
– addition
– multiplication

20
Matrix Operations
 Transpose
– The result of transposing an m x n matrix is an n x m
matrix with property:
MT(j,i) = M(i,j), 1 <= i <= m, 1 <= j <= n

 Addition
– The sum of matrices is only defined for matrices that
have the same dimensions.
– The sum of two m x n matrices A and B is an m x n
matrix with the property:
C(i,j) = A(i,j) + B(i,j), 1 <= i <= m, 1 <= j <= n

21
Matrix Operations
 Multiplication
– The product of matrices A and B is only defined when
the number of columns in A is equal to the number of
rows in B.
– Let A be m x n matrix and B be a n x q matrix. A*B will
produce an m x q matrix with the following property:

C(i,j) = Σ(k=1…n) A(i,k) * B(k,j)


where 1 <= i <= m and 1 <= j <= q

 Read Example 7.2

22
A Matrix Class
 There are many possible implementations for
matrices.
// use a built-in 2 dimensional array
T matrix[m][n]

// use the Array2D class


Array2D<T> matrix(m,n)

// or flatten the matrix into a one-dimensional array


template<class T>
class Matrix {
private: int rows, columns;
T *data;
};
23
Shortcomings of using a 2D Array for a Matrix

 Indexes are off by 1.


 C++ arrays do not support matrix operations such
as add, transpose, multiply, and so on.
– Suppose that x and y are 2D arrays. Cannot do x + y,
x –y, x * y, etc. in C++.
 We need to develop a class matrix for object-
oriented support of all matrix operations.
 See Programs 7.2-7.7
 Read Sections 7.1-7.2

24

You might also like