Transcript Lecture 5

CS 221
Analysis of Algorithms
Data Structures
Vectors, Lists
Portions of the following slides are from
Goodrich and Tamassia, Algorithm
Design: Foundations, Analysis and
Internet Examples, 2002
and
Material provided by the publisher’s
John Wiley & Son, Inc.) companion
website for this book
Data Structures
 We have seen data structures
 Stacks – LIFO
 Queues – FIFO
 These were very efficient where
 we need back most recently stored data –
Stack
 we need to retrieve data in the order that is
was stored
 How efficient?
Data Structures
 Stacks and Queue are not so efficient
 When?
 We need to handle data somewhere
other than the end of the structure
Vectors
 Suppose we have a linear sequence
of data
What does linear sequence means?
Call sequence S
S contains n elements
Rank = number of elements before a
given element in the sequence
 First element in S has rank = 0
 Last element in S has rank = n-1




Vectors
 An element can be accessed, inserted
or removed by specifying its rank
(number of elements preceding it)
 An exception is thrown if an incorrect
rank is specified (e.g., a negative
rank, rank > n)
 Can be implemented using array
construct
Vectors
 Main vector operations:
 elemAtRank(integer r): returns the
element at rank r without removing it
 replaceAtRank(integer r, object o):
replace the element at rank with o and return
the old element
 insertAtRank(integer r, object o):
insert a new element o to have rank r
 removeAtRank(integer r): removes and
returns the element
Vectors
 Auxiliary vector operations:
 Size(): how many elements are in S
 isEmpty(): return boolean for whether vector
has no elements
Vectors - applications
 How would you use this type of structure?
Vectors – array implementation
 Use an array V of size N
 A variable n keeps track of the size of
the vector (number of elements
stored)
V
0 1 2
r
n
from: Goodrich and Tamassia, 2002
Vectors – array implementation
 elementAtRank(r)
 run-time?
 O(1)
V
0 1 2
r
n
from: Goodrich and Tamassia, 2002
Vectors – array implementation
 replaceAtRank(r)
 run-time?
 O(1)
V
0 1 2
r
n
from: Goodrich and Tamassia, 2002
Vectors – array implementation

insertAtRank(r,o)
 keep in mind-we need to make room for the new
element by shifting forward the n - r elements V[r], …,
V[n - 1]



Worst case?
run-time?
O(n)
V
0 1 2
r
n
0 1 2
r
n
0 1 2
o
r
V
V
from: Goodrich and Tamassia, 2002
n
Vectors – array implementation
 removeAtRank(r,o)
 We need to shift every element after removed
element to fill hole .. V[r]=V[r+1], V[r+1]=V[r+2],…
 Worst case?
 run-time?
 O(n)
V
0 1 2
o
r
n
0 1 2
r
n
0 1 2
r
V
V
from: Goodrich and Tamassia, 2002
n
Vectors - performance
Operation
size()
isEmpty()
elementAtRank()
replaceAtRank()
insertAtRank()
removeAtRank()
T(n)
O(1)
O(1)
O(1)
O(1)
O(n)
O(n)
Lists
 Vectors (or the algorithms to use them)are
pretty efficient data structures
 …but not so efficient if we have to
reorganize them (insertAtRank,
removeAtRank)
 What if we want to access data with respect
to its position in structure, particularly with
respect to other elements?
Lists
 Consider the concept of an element in a
structure as a node
 Node contains
 value of element
 location of its neighbor node - link
next
elem
node
Lists
 As a single linked list
 we maintain sequence
 if we have an element we know next element
…
A
B
C
D
Lists
 How about a Stack (LIFO) as a list
 Queue (FIFO)as a list
…
A
B
C
D
Double LinkedLists


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
prev
next
elem
node
Special trailer and header nodes
header
nodes/positions
elements
trailer
Position Abstract Data Type
 The Position ADT models the notion
of place within a data structure
where a single object is stored
 It gives a unified view of diverse
ways of storing data, such as
 a cell of an array
 a node of a linked list
 Just one method:
 object element(): returns the element
stored at the position
List Abstract Data Type
It establishes a before/after
relation between positions
Generic methods:
size(), isEmpty()
Query methods:
isFirst(p), isLast(p)
List Abstract Data Type
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)
Element Insertion
 insertAfter(p, X), which returns position q
A
B
C
p
A
q
B
C
X
p
A
q
B
X
C
Element Deletion
 remove(p), where p = last()
p
A
B
C
A
B
C
D
p
D
A
B
C
List Performance
 Consider a double linked list
 Space?
 run-time
 insertAfter(p)
 remove(p)
 What about growth?