1 / 34

Data Structure

Data Structure. Sang Yong Han http://ec.cse.cau.ac.kr/. Arrays. Array: a set of pairs ( index and value ) data structure For each index, there is a value associated with that index. representation (possible) implemented by using consecutive memory.

jamar
Download Presentation

Data Structure

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Data Structure Sang Yong Han http://ec.cse.cau.ac.kr/ Chung-Ang University Spring 2011

  2. Arrays Array: a set of pairs (index and value) data structure For each index, there is a value associated with that index. representation (possible) implemented by using consecutive memory.

  3. 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 Aelse 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

  4. 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 array list[0] base address =  list[1]  + sizeof(int) list[2]  + 2*sizeof(int) list[3]  + 3*sizeof(int) list[4]  + 4*size(int)

  5. 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]

  6. Example 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”); }

  7. 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]

  8. 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

  9. 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

  10. 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 arrayof 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

  11. x[] a b c d e f g h i j k l Array Representation In C • This representation is called the array-of-arrays representation. • Contiguous space required for this representation ?

  12. 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 Polynomials A(X)=3X20+2X5+4, B(X)=X4+10X3+3X2+1

  13. Polynomial ADT Objects: 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) = 0 Boolean IsZero(poly) ::= if (poly) return FALSEelse returnTRUECoefficient 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

  14. Polyomial ADT (cont’d) Polynomial Remove(poly, expon) ::= if (expon  poly) return the polynomial poly with the term whose exponent is expon deletedelse return errorPolynomial SingleMult(poly, coef, expon)::= return the polynomialpoly • coef • xexponPolynomial Add(poly1, poly2) ::= return the polynomialpoly1 +poly2Polynomial Mult(poly1, poly2) ::= return the polynomialpoly1 • poly2

  15. Polynomial Addition (1) #define MAX_DEGREE 101 typedef struct { int degree; float coef[MAX_DEGREE]; } polynomial; Running time? Addition(polynomial * a, polynomial * b, polynomial* c) { … } advantage: easy implementation disadvantage: waste space when sparse

  16. starta finisha startbfinishb avail coef exp 0 1 2 3 4 5 6 Polynomial Addition (2) • Use one global array to store all polynomials A(X)=2X1000+1 B(X)=X4+10X3+3X2+1

  17. Polynomial Addition (2) (cont’d) #define MAX_TERMS 100 typedef struct { int exp; float coef; } polynomial; polynomial terms[MAX_TERMS]; Running time? Addition(int starta, int enda, int startb, int endb, int startc, int endc) { … } advantage: less space disadvantage: longer code Time Complexity ?

  18. Sparse Matrices col1 col2 col3 col4 col5 col6 row0 row1 row2 row3 row4 row5 5*3 6*6 15/15 8/36 sparse matrix data structure?

  19. 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)

  20. 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

  21. 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)

  22. Sparse Matrix ADT Objects: a set of triples, <row, column, value>, where row and column are integers and form a unique combination, andvalue comes from the set item.Methods: for all a, b Sparse_Matrix, x item, i, j, max_col, max_row  indexSparse_MarixCreate(max_row, max_col) ::=return a Sparse_matrix that can hold up tomax_items = max _row  max_col and whose maximum row size is max_row and whose maximum column size is max_col.

  23. Sparse Matrix ADT (cont’d) Sparse_MatrixTranspose(a) ::=return the matrix produced by interchanging the row and column value of every triple.Sparse_MatrixAdd(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_MatrixMultiply(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 elementelse return error.

  24. Sparse Matrix Representation (1) Represented by a two-dimensional array. Sparse matrix wastes space. (2) Each element is characterized by<row, col, value>. 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 ordered based on <row, col>

  25. Matrix Transpose • 0 0 0 0 • 0 0 0 2 • 3 5 0 6 • 0 7 0 0 • 4 0 0 0 • 0 0 3 0 4 • 0 0 5 7 0 • 0 0 0 0 0 • 0 2 6 0 0

  26. 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 ?

  27. 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

  28. Transpose a Sparse Matrix (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>

  29. 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 */

  30. Time Complexity Analysis of Matrix Transpose

  31. 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)

  32. 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)

  33. Runtime Performance - 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

  34. Runtime Performance - Addition Matrix Addition. 500 x 500 matrices with 1994 and 999 nonzero elements 2D array 880 ms SparseMatrix 18 ms

More Related