1 / 37

CSCE 3110 Data Structures & Algorithm Analysis

CSCE 3110 Data Structures & Algorithm Analysis. Arrays and Lists. 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. Arrays in C++.

infinity
Download Presentation

CSCE 3110 Data Structures & Algorithm Analysis

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. CSCE 3110Data Structures & Algorithm Analysis Arrays and Lists

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

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

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

  5. Example #include <iostream> void print1(int *ptr, int rows) { int i; cout << "Address Contents" << endl; for (i=0; i < rows; i++) cout << ptr+i << " " << *(ptr+i) << endl; } void main(){ int one[] = {0, 1, 2, 3, 4}; //Goal: print out address and value print1(one, 5); } Address Contents 0xbffffbb4 0 0xbffffbb8 1 0xbffffbbc 2 0xbffffbc0 3 0xbffffbc4 4

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

  7. Questions • What is the complexity of “retrieve” in an array? • What is the complexity of “store” in an array? • What about insertion and deletion for ordered elements in an arrary?

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

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

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

  11. Polynomial Addition (1) Use an array to keep track of the coefficients for all exponents A(X)=2X1000+1 B(X)=X4+10X3+3X2+1 Running time? A B advantage: easy implementation disadvantage: waste space when sparse

  12. Running time? Polynomial Addition (2) • Store pairs of exponent and coefficient A(X)=2X1000+1 B(X)=X4+10X3+3X2+1 advantage: less space disadvantage: longer code starta finisha startbfinishb avail coef exp 0 1 2 3 4 5 6

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

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

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

  16. Sparse Matrix Representation (1) Represented by a two-dimensional array. Sparse matrix wastes space. (2) Each element is characterized by<row, col, value>. The terms in A should be ordered based on <row, col>

  17. Sparse Matrix Operations • Transpose of a sparse matrix. • What is the transpose of a 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

  18. Transpose a Sparse Matrix • Write Pseudo codes for transposing sparse matrix. • Analyze its complexity. Example: (0, 0, 15) ====> (0, 0, 15) (0, 3, 22) ====> (3, 0, 22) (0, 5, -15) ====> (5, 0, -15) (1, 1, 11) ====> (1, 1, 11) Note: your array is one dimensional

  19. Linked Lists • Avoid the drawbacks of fixed size arrays with • Growable arrays • Linked lists

  20. Growable arrays • Avoid the problem of fixed-size arrays • Increase the size of the array when needed (I.e. when capacity is exceeded) • Two strategies: • tight strategy (add a constant): f(N) = N + c • growth strategy (double up): f(N) = 2N

  21. Tight Strategy • Add a number k (k = constant) of elements every time the capacity is exceeded 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 C0 + (C0+k) + … (C0+(S-1)k) = S = (N – C0) / k Running time? C0 * S + S*(S+1) / 2  O(N2) S: number of times array capacity is exceeded

  22. Tight Strategy void insertLast(int rear, element o) { if ( size == rear) { capacity += k; element* B = new element[capacity]; for(int i=0; i<size; i++) { B[i] = A[i]; } A = B; } A[rear] = o; rear++; size++; }

  23. Growth Strategy S: number of times array capacity is exceeded • Double the size of the array every time is needed (I.e. capacity exceeded) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 C0 + (C0 * 2) + (C0*4) + … + (C0*2s-1) = s = log (N / C0) Running time? C0 [1 + 2 + … + 2 log(N/C0)-1 ]  O(N) How does the previous code change?

  24. Linked Lists • Avoid the drawbacks of fixed size arrays with • Growable arrays • Linked lists

  25. int *pi = new int; float *pf=new float; *pi =1024; *pf =3.14; cout << “an integer “ << *pi << “ a float = ” << *pf; free(pi); free(pf); Using Dynamically Allocated Memory (review) request memory return memory

  26. bat  cat  sat  vat NULL Linked Lists

  27. Singly Linked List next • A singly linked list is a concrete data structure consisting of a series of nodes • Each node stores • Data item • Link to the next node Data item NODE HEAD CURRENT TAIL A B C D 

  28. A B C  X 2 A B C  3 1 X A B X C  Insertion

  29. 1 A B D  2 C A B C D  A B D  Deletion X

  30. Implement a Linked List • Single Linked List (.h, .cpp, test program) • Double Linked List (.h, .cpp, test program)

  31. Linked List vs. Array • Linked list can be easily expanded or reduced; Array needs a contiguous memory space and may not even be possible to resize. • Insertion and deletion in linked list are O(1) while it takes O(n) for array. • Array allow random access and the indexing of an array takes O(1). The sequential access with linked list makes it more expensive in indexing, which takes O(n)

  32. Can we do insertion BEFORE a node in singly linked list? • Can we do deletion BEFORE a node in singly linked list?

  33. The List ADT models a sequence of positions storing arbitrary objects It establishes a before/after relation between positions Generic methods: size(), isEmpty() Query methods: isFirst(p), isLast(p) Accessor methods: first(), last() before(p), after(p) Update methods: replaceElement(p, o), swapElements(p, q) insertBefore(p, o), insertAfter(p, o), insertFirst(o), insertLast(o) remove(p) List ADT

  34. Doubly Linked List prev next • A doubly linked list provides a natural implementation of the List ADT • Nodes implement Position and store: • element • link to the previous node • link to the next node • Special trailer and header nodes elem node trailer nodes/positions header elements

  35. Insertion p • We visualize operation insertAfter(p, X), which returns position q A B C p A B C q X p q A B X C

  36. A B C Deletion p • We visualize remove(p), where p = last() A B C D B C A p D

  37. Running Time Analysis • insertAfter O(?) • deleteAfter O(?) • deleteBefore O(?) • deleteLast O(?) • insertFirst O(?) • insertLast O(?)

More Related