+ All Categories
Home > Documents > Data Structure Sang Yong Han Chung-Ang University Spring 20111.

Data Structure Sang Yong Han Chung-Ang University Spring 20111.

Date post: 13-Jan-2016
Category:
Upload: chloe-cameron
View: 218 times
Download: 2 times
Share this document with a friend
34
Data Structure Sang Yong Han http://ec.cse.cau.ac.kr/ Chung-Ang University Spring 2011 1
Transcript
Page 1: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Data Structure

Sang Yong Han

http://ec.cse.cau.ac.kr/

Chung-Ang University Spring 2011 1

Page 2: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Arrays

Array: a set of pairs (index and value)

data structureFor each index, there is a value associated with

that index.

representation (possible)implemented by using consecutive memory.

Page 3: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Objects: A set of pairs <index, value> where for each value of index there is a value from the set item. Index is a finite ordered set of one or more dimensions, for example, {0, … , n-1} for one dimension, {(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)} for two dimensions, etc. Methods: for all A Array, i index, x item, j, size integer Array Create(j, list) ::= return an array of j dimensions where list is a j-tuple whose kth element is the size of the kth dimension. Items are undefined. Item Retrieve(A, i) ::= if (i index) return the item associated with index value i in array A else return error Array Store(A, i, x) ::= if (i in index) return an array that is identical to array A except the new pair <i, x> has been inserted else return error

The Array ADT

Page 4: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Arrays in C

int list[5], *plist[5];

list[5]: five integers list[0], list[1], list[2], list[3], list[4]*plist[5]: five pointers to integers

plist[0], plist[1], plist[2], plist[3], plist[4]

implementation of 1-D arraylist[0] base address = list[1] + sizeof(int)list[2] + 2*sizeof(int)list[3] + 3*sizeof(int)list[4] + 4*size(int)

Page 5: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Arrays in C (cont’d)

Compare int *list1 and int list2[5] in C.Same: list1 and list2 are pointers.Difference: list2 reserves five locations.

Notations:list2 - a pointer to list2[0](list2 + i) - a pointer to list2[i] (&list2[i])*(list2 + i) - list2[i]

Page 6: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Address Contents

1228 0

1230 1

1232 2

1234 3

1236 4

Example:

int one[] = {0, 1, 2, 3, 4}; //Goal: print out address and value

void print1(int *ptr, int rows)

{

printf(“Address Contents\n”);

for (i=0; i < rows; i++)

printf(“%8u%5d\n”, ptr+i, *(ptr+i));

printf(“\n”);

}

Example

Page 7: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

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]

Page 8: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

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

Page 9: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

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

Page 10: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

2D Array Representation In C

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 1D arrays

2-dimensional array x

a, b, c, d

e, f, g, h

i, j, k, l

Page 11: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Array Representation In C

This representation is called the array-of-arrays representation.Contiguous space required for this representation ?

a b c d

e f g h

i j k l

x[]

Page 12: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

nen

e xaxaxp ...)( 11

Polynomials A(X)=3X20+2X5+4, B(X)=X4+10X3+3X2+1

Other Data Structures Based on Arrays

•Arrays: •Basic data structure•May store any type of elements

Polynomials: defined by a list of coefficients and exponents- degree of polynomial = the largest exponent in a polynomial

Page 13: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Polynomial ADTObjects: a set of ordered pairs of <ei,ai>

where ai in Coefficients and ei in Exponents, ei are integers

>= 0Methods:for all poly, poly1, poly2 Polynomial, coef Coefficients, expon ExponentsPolynomial Zero( ) ::= return the polynomial p(x) = 0Boolean IsZero(poly) ::= if (poly) return FALSE else return TRUECoefficient Coef(poly, expon) ::= if (expon poly) return its coefficient else return Zero Exponent Lead_Exp(poly) ::= return the largest exponent in polyPolynomial Attach(poly,coef, expon) ::= if (expon poly) return error else return the polynomial poly with the term <coef, expon> inserted

Page 14: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Polyomial ADT (cont’d)

Polynomial Remove(poly, expon) ::= if (expon poly) return the polynomial poly with the term whose exponent is expon deleted else return errorPolynomial SingleMult(poly, coef, expon)::= return the polynomial poly • coef • xexpon

Polynomial Add(poly1, poly2) ::= return the polynomial poly1 +poly2

Polynomial Mult(poly1, poly2) ::= return the polynomial poly1 • poly2

Page 15: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Polynomial Addition (1)

#define MAX_DEGREE 101typedef struct {

int degree;float coef[MAX_DEGREE];

} polynomial;

Addition(polynomial * a, polynomial * b, polynomial* c) { …}

advantage: easy implementationdisadvantage: waste space when sparse

Running time?

Page 16: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Use one global array to store all polynomials

Polynomial Addition (2)

2 1 1 10 3 1

1000 0 4 3 2 0coef

exp

starta finisha startb finishb avail

0 1 2 3 4 5 6

A(X)=2X1000+1B(X)=X4+10X3+3X2+1

Page 17: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Polynomial Addition (2) (cont’d)

#define MAX_TERMS 100typedef struct {

int exp;float coef;

} polynomial;polynomial terms[MAX_TERMS];

Addition(int starta, int enda, int startb, int endb, int startc, int endc) { …}

advantage: less spacedisadvantage: longer codeTime Complexity ?

Running time?

Page 18: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

0002800

0000091

000000

006000

0003110

150220015col1 col2 col3 col4 col5 col6

row0

row1

row2

row3

row4

row5

8/36

6*65*3

15/15

sparse matrixdata structure?

Sparse Matrices

Page 19: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Sparse Matrix - Airline flight

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)

Page 20: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Sparse Matrix - Web page matrix

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

Page 21: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Web Page Matrix

n = 2 billion (and growing by 1 million 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

space needed for nonzero elements is approximately 2billion x 10 x 4 bytes = 80 billion bytes (80 GB)

Page 22: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Sparse Matrix ADT Objects: a set of triples, <row, column, value>, where row and column are integers and form a unique combination, and value comes from the set item. Methods: for all a, b Sparse_Matrix, x item, i, j, max_col, max_row index

Sparse_Marix Create(max_row, max_col) ::= return a Sparse_matrix that can hold up to max_items = max _row max_col and whose maximum row size is max_row and whose maximum column size is max_col.

Page 23: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Sparse Matrix ADT (cont’d)Sparse_Matrix Transpose(a) ::= return the matrix produced by interchanging the row and column value of every triple.Sparse_Matrix Add(a, b) ::= if the dimensions of a and b are the same return the matrix produced by adding corresponding items, namely those with identical row and column values. else return errorSparse_Matrix Multiply(a, b) ::= if number of columns in a equals number of rows in b return the matrix d produced by multiplying a by b according to the formula: d [i] [j] = (a[i][k]•b[k][j]) where d (i, j) is the (i,j)th element else return error.

Page 24: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

(1) Represented by a two-dimensional array. Sparse matrix wastes space.(2) Each element is characterized by <row, col, value>.

Sparse Matrix Representation

Sparse_matrix Create(max_row, max_col) ::= #define MAX_TERMS 101 /* maximum number of terms +1*/ typedef struct { int col; int row; int value; } term; term A[MAX_TERMS]

The terms in A should be orderedbased on <row, col>

Page 25: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

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

Page 26: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Transpose of a Sparse Matrix in 2D array representation

for (j = 0; j < columns; j++) for( i = 0; i <rows; i++)

b[j][i] = a[i][j];

Time and Space Complexity ?

Page 27: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Sparse Matrix Operations

Transpose of a sparse matrix.

row col value row col valuea[0] 6 6 8 b[0] 6 6 8 [1] 0 0 15 [1] 0 0 15 [2] 0 3 22 [2] 0 4 91 [3] 0 5 -15 [3] 1 1 11 [4] 1 1 11 [4] 2 1 3 [5] 1 2 3 [5] 2 5 28 [6] 2 3 -6 [6] 3 0 22 [7] 4 0 91 [7] 3 2 -6 [8] 5 2 28 [8] 5 0 -15

transpose

Page 28: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

(1) for each row i take element <i, j, value> and store it in element <j, i, value> of the transpose. difficulty: where to put <j, i, value>? (0, 0, 15) ====> (0, 0, 15) (0, 3, 22) ====> (3, 0, 22) (0, 5, -15) ====> (5, 0, -15)

(1, 1, 11) ====> (1, 1, 11) Move elements down very often.

(2) For all elements in column j, place element <i, j, value> in element <j, i,

value>

Transpose a Sparse Matrix

Page 29: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Transpose of a Sparse Matrix void transpose (term a[], term b[])/* b is set to the transpose of a */{ int n, i, j, currentb; n = a[0].value; /* total number of elements */ b[0].row = a[0].col; /* rows in b = columns in a */ b[0].col = a[0].row; /*columns in b = rows in a */ b[0].value = n; if (n > 0) { /*non zero matrix */ currentb = 1; for (i = 0; i < a[0].col; i++) /* transpose by columns in a */ for( j = 1; j <= n; j++) /* find elements from the current column */ if (a[j].col == i) { /* element is in current column, add it to b */

Page 30: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Time Complexity Analysis of Matrix Transpose

Page 31: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Fast Matrix Transpose

Step 1: #nonzero in each row of transpose.

= #nonzero in each column of original matrix

= [2, 1, 2, 2, 0, 1]

Step2: Calculate Starting position of each row of transpose

= [1, 3, 4, 6, 8, 8]

Step 3: Move elements from original list to transpose list.

Complexity

m x n original matrix

t nonzero elements

Step 1: O(n+t)

Step 2: O(n)

S: O(t)

Overall O(n+t)

Page 32: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Time Complexity Analysis of Fast Matrix Transpose

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)

Page 33: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Runtime Performance - Transpose

500 x 500 matrix with 1994 nonzero elements

Run time measured on a 300MHz Pentium II PC

2D array 210 msSparseMatrix 6 ms

Page 34: Data Structure Sang Yong Han  Chung-Ang University Spring 20111.

Runtime Performance - Addition

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

elements

2D array 880 msSparseMatrix 18 ms


Recommended