Top Banner
CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists
37

CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

Dec 31, 2015

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

CSCE 3110Data Structures & Algorithm Analysis

Arrays and Lists

Page 2: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

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

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

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

#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);

}

Example

Address Contents0xbffffbb4 00xbffffbb8 10xbffffbbc 20xbffffbc0 30xbffffbc4 4

Page 6: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

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

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?

Page 8: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

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

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(0) Boolean 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 10: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

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

Polynomial Addition (1)

Use an array to keep track of the coefficients for all exponents

advantage: easy implementationdisadvantage: waste space when sparse

Running time?

… 2 … 0 0 0 0 1

… 0 … 1 10 3 0 1

1000 … 4 3 2 1 0

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

A

B

Page 12: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

Store pairs of exponent and coefficient

Polynomial Addition (2)

2 1 1 10 3 1

1000 0 4 3 2 0

coef

exp

starta finisha startb finishb avail

0 1 2 3 4 5 6

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

advantage: less spacedisadvantage: longer code

Running time?

Page 13: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

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

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

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

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

Sparse Matrix Representation

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

Page 17: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

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

Page 18: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

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

Page 19: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

Linked Lists

Avoid the drawbacks of fixed size arrays with

Growable arraysLinked lists

Page 20: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

Growable arrays

Avoid the problem of fixed-size arraysIncrease the size of the array when needed (I.e. when capacity is exceeded)Two strategies:

tight strategy (add a constant): f(N) = N + cgrowth strategy (double up): f(N) = 2N

Page 21: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

Tight Strategy

Add a number k (k = constant) of elements every time the capacity is exceeded

123456789101112131415

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

Page 22: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

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++; }

Page 23: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

Growth Strategy

Double the size of the array every time is needed (I.e. capacity exceeded)1

23456789101112131415

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?

S: number of times array capacity is exceeded

Page 24: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

Linked Lists

Avoid the drawbacks of fixed size arrays with

Growable arraysLinked lists

Page 25: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

int *pi = new int;float *pf=new float;*pi =1024;*pf =3.14;

cout << “an integer “ << *pi << “ a float = ” << *pf;

free(pi);free(pf);

request memory

return memory

Using Dynamically Allocated Memory (review)

Page 26: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

bat cat sat vat NULL

Linked Lists

Page 27: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

Singly Linked List

A singly linked list is a concrete data structure consisting of a series of nodes

Each node storesData itemLink to the next node

next

Data item NODE

A B C D

HEAD CURRENT TAIL

Page 28: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

Insertion

A B C

X

A B

X

C

1

2

3

A B C X

Page 29: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

Deletion

C

A B D

2

1

A B D CX

A B D

Page 31: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

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)

Page 32: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

Can we do insertion BEFORE a node in singly linked list?

Can we do deletion BEFORE a node in singly linked list?

Page 33: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

List ADT

The List ADT models a sequence of positions storing arbitrary objectsIt establishes a before/after relation between positionsGeneric 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)

Page 34: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

Doubly Linked List

A doubly linked list provides a natural implementation of the List ADTNodes implement Position and store:

elementlink to the previous nodelink to the next node

Special trailer and header nodes

prev next

elem

trailerheader nodes/positions

elements

node

Page 35: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

InsertionWe visualize operation insertAfter(p, X), which returns position q

A B X C

A B C

p

A B C

p

Xq

p q

Page 36: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

DeletionWe visualize remove(p), where p = last()

A B C D

p

A B C

Dp

A B C

Page 37: CSCE 3110 Data Structures & Algorithm Analysis Arrays and Lists.

Running Time Analysis

insertAfter O(?)deleteAfter O(?)deleteBefore O(?)deleteLast O(?)insertFirst O(?)insertLast O(?)