0% found this document useful (0 votes)
50 views45 pages

15.082J/6.855J/ESD.78J September 14, 2010: Data Structures

The document provides an overview of various data structures including lists, sets, stacks, queues, trees and networks. It discusses different ways of representing subsets of a set using arrays and linked lists. Complete binary trees and adjacency matrices are introduced as efficient ways to store ordered lists and networks. Common operations like insertion, deletion and searching are discussed for different data structures and their time complexities are provided.

Uploaded by

eviroyer
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
50 views45 pages

15.082J/6.855J/ESD.78J September 14, 2010: Data Structures

The document provides an overview of various data structures including lists, sets, stacks, queues, trees and networks. It discusses different ways of representing subsets of a set using arrays and linked lists. Complete binary trees and adjacency matrices are introduced as efficient ways to store ordered lists and networks. Common operations like insertion, deletion and searching are discussed for different data structures and their time complexities are provided.

Uploaded by

eviroyer
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 45

15.082J/6.855J/ESD.

78J September 14, 2010

Data Structures

Overview of this Lecture

A very fast overview of some data structures that we will be using this semester lists, sets, stacks, queues, networks, trees a variation on the well known heap data structure binary search Illustrated using animation We are concerned with O( ) computation counts, and so do not need to get down to C++- level (or Java level).

Two standard data structures


1 2 3 4 5 6 7 8 9 10 1 0 1 1 0 1 0 1 0 0 Array: a vector: stored consecutively in memory, and typically allocated in advance first This is a singly linked list

cells: hold fields of numbers and pointers to implement lists.


3

Representations of subsets of a set


subset S = {1, 3, 4, 6, 8}

1 2 3 4 5 6 7 8 9 10
Array A 1 0 1 1 0 1 0 1 0 0

first

List L

The choice of data structure depends on what operations need to be carried out.

Example 1:

Creating an empty set

Initialize: subset S =

1 2 3 4
0 0 0 0

n
0 O(n) steps

first
O(1) steps 0
5

Example 2:
Is 9 S?

Is x S?

1 2 3 4 5 6 7 8 9 10
1 0 1 1 0 1 0 1 0 0 O(1) steps

first

To determine if 9 S?, one needs to scan the entire list.

4
O(n) steps
6

Representing a linked list as an array


first

1 2 3 4 5 6 7 8 9 10 Array: Next 6 8 3 4

If Next(j) is empty, then j is not on the list If Next(j) = , then j is the last element on the list
7

Two key concepts


Abstract data types: a descriptor of the operations that are permitted, e.g., abstract data type: set S initialize(S): creates an empty set S add(S, s): replaces S by S {s}. delete(S, s): replaces S by S \{s} IsElement(S, s): returns true if s S etc.

Data structure: usually describes the high level implementation of the abstract data types, and can be analyzed for running time. doubly linked list, etc
8

A note on data structures

Preferences Simplicity Efficiency In case there are multiple good representations, we will choose one

Abstract data type: SetOperations


(assume S {1, 2, 3, n}.
S := S := S {j} S := S\{j} returns TRUE if s S if S , returns j for some j S

Operation

initialize(S): add(S, j): delete(S, j): IsElement(S, j): FindElement(S):

Next(S, j) :

if j S, it finds the next element


after j on S (viewed as a list)
10

Implementation using doubly linked list


first 2 8 4 2 4

First = 8

1 2 3 4 5 6 7 8 9 10
Next( ) 4 2

1 2 3 4 5 6 7 8 9 10 Prev 8 2
11

Add element 5 to the set (in first position)


5 first 2 8 4 2 4

1 2 3 4 5 6 7 8 9 10 Next( ) Prev( ) Temp:= First 4 8 2 2 5 Elt First Temp


12

5 8

First:= Elt Prev(Temp): = Elt Prev(Elt): = Next(Elt): = Temp

Add element 5 to the set (in first position)


5 first 2 8 4 2 4

1 2 3 4 5 6 7 8 9 10 Next( ) Prev( ) 4 8 8 2 2 5 Elt 5

First
Temp

8 5
8

Temp:= First

First:= Elt Prev(Temp): = Elt Prev(Elt): = Next(Elt): = Temp

Adding an element to a set takes O(1) steps using this implementation.


13

Delete element 2 from the set (assume it is neither in first or last position)
5 first 2 8 4 2 4

1 2 3 4 5 6 7 8 9 10 Next( ) Prev( ) 4 8 8 2 2 5 Elt 2

First
Temp

8 5

14

Delete element 2 from the set (assume it is neither in first or last position)
5 first 2 8 2 4

1 2 3 4 5 6 7 8 9 10 Next( ) Prev( ) 4 8 8 2 8 2 4 5 Elt 2

First

8 5

Next(Prev(Elt)):=Next(Elt)

Prev(Next(Elt)):=Prev(Elt) Prev(Elt) := 0 Next(Elt): = 0

Deleting an element from the set takes O(1) steps using this implementation.
15

Operations using doubly linked lists

Operation

Number of steps O(n) O(1)

initialize(S): add(S, j):

delete(S, j):
IsElement(S, j): FindElement(S): Next(S, j): Previous(S, j) :

O(1)
O(1) O(1) O(1) O(1)
16

Maintaining disjoint subsets of elements


S1 = {8, 2, 4} First(1) First(2) 2 8 2 5 S1 = {5, 7, 1} 4 2 4 7 4 1

1 2 3 4 5 6 7 8 9 10 Next( ) Prev( ) First( ) 4 7 8 8 5


17

7 2

1 2 5

Maintaining ordered lists


The doubly linked list is not efficient for maintaining ordered lists of nodes. first 2 4 8

1 2 3 4 5 6 7 8 9 10

Next( )
Prev( )

4
8

2
5

Inserting an element into the set (such as 7) requires finding Prev and Next for 7 (4 and 8), and this requires O(n) time with this implementation.
18

Mental Break
Who created the cartoon characters "The Simpson's?
Matt Groening

Which country would you be in if you were to ski in the


Dolomites? Italy Who was the first U.S. president to adopt the informal version of his first name?

Jimmy Carter
19

Mental Break
Which country owns the island of Bermuda?
Great Britain

What colors do most color blind persons have trouble


distinguishing? red and green What bird is used as the sign of peace? the dove

20

Complete binary tree with n elements


Complete binary trees for storing ordered lists of nodes or arcs. We assume that the number of nodes is n (e.g., 8) and the number of arcs is m. S = {2, 4, 8} n = 8.

21

Complete binary tree with n elements


Build up the binary tree. In each parent store the least value of its children.

S = {2, 4, 8}

n = 8.

2 2

4 4

8 8

22

Complete binary tree with n elements


Build up the binary tree. In each parent store the least value of its children.

S = {2, 4, 8}

n = 8.

2 2

4 4

8 8

23

Complete binary tree with n elements


Build up the binary tree. In each parent store the least value of its children. S = {2, 4, 8} n = 8. 2

2 2

4 4

8 8

24

Find greatest element less than j


e.g., find the greatest element less than 7
O(log n) steps for finding greatest element less than j.
start at 7 go up the tree until a node has label < 7. Take left branch. Choose the largest label child going down.

8 5

2 2

4 4 5

8 8

25

Delete an element
e.g., delete element 2 O(log n) steps for an deletion Start at node 2 and update it and its ancestors. 2 4 S = {4, 5, 8} n = 8.

2 4

8 5

2 2

4 4 5

8 8

26

Operations using complete binary trees


Operation

Number of steps O(n) O(log n) O(log n) O(1)

initialize(S): add(S, j): delete(S, j): IsElement(S, j):

FindElement(S):
Next(S, j): Previous(S, j) : MinElement(S) MaxElement(S)

O(1)
O(log n) O(log n) O(1) O(log n)
27

A network
2 We can view the arcs of a networks as a collection of sets. 3 Let A(i) be the arcs emanating from node i.

e.g., A(5) = { (5,3), (5,4) }


5 4

Note: these sets are usually static. They stay the same.
Common operations: scanning the list A(i) one arc at a time starting at the first arc.
28

Storing Arc Lists: A(i)


Operations permitted Find first arc in A(i) Store a pointer to the current arc in A(i) Find the arc after CurrentArc(i) i 1 2 j cij uij
2 25 30 4 15 40 2 45 10 5 45 60 3 23 35 5 15 40

3
4 5

3 25 20

4 35 50
29

Scanning the arc list


CurrentArc(i) is a pointer to the arc of A(i) that is being scanned or is the next to be scanned.
CurrentArc(1) CurrentArc(1) CurrentArc(1)

2 25 30

3 23 35

5 15 40

Initially, CurrentArc(i) is the first arc of A(i)

After CurrentArc(i) is fully scanned, CurrentArc(i) := Next(CurrentArc(i))

30

Scanning the arc list


CurrentArc(i) is a pointer to the arc of A(i) that is being scanned or is the next to be scanned.
CurrentArc(1) CurrentArc(1) CurrentArc(1)

2 25 30

3 23 35

5 15 40

2 1 3 5

Finding CurrentArc and the arc after CurrentArc takes O(1) steps. These are also implemented often using arrays called forward star representations.
31

The Adjacency Matrix (for directed graphs)


b 1 2 c e

1 2

a 4

A Directed Graph

1 2 3 4

0 0 0 0

1 0 1 0 1 0 0 0 0 1 1 0

Have a row for each node

Have a column for each node Put a 1 in row i- column j if (i,j) is an arc
What would happen if (4,2) became (2,4)?
32

The Adjacency Matrix (for undirected graphs)


b 1 a c 2 e

1 2

4 degree

1 2 3 4

0 1 0 1

1 0 1 0 1 1 1 0 1 1 1 0

2 3 2 3

An Undirected Graph

Have a row for each node

Have a column for each node Put a 1 in row i- column j if (i,j) is an arc The degree of a node is the number of incident arcs

33

Adjacency Matrix vs Arc Lists


Adjacency Matrix? Efficient storage if matrix is very dense. Can determine if (i,j) A(i) in O(1) steps. Scans arcs in A(i) in O(n) steps. Adjacency lists? Efficient storage if matrix is sparse. Determining if (i,j) A(i) can take |A(i)| steps Can scan all arcs in A(i) in |A(i)| steps

34

Trees
A tree is a connected acyclic graph. (Acyclic here, means it has no undirected cycles.) If a tree has n nodes, it has n-1 arcs. 3 This is an undirected tree. To store trees efficiently, we hang the tree from a root node. (In principle, any node can be selected for the root.) 4 2 5

35

Forest
A forest is an acyclic graph that includes all of the nodes. A subtree of a forest is a connected component of the forest. 10 3 1 6 9 2 5 7 To store trees efficiently, each subtree has a root node. 4 8

36

One way of storing subtrees


Lists of children

1 2

4
5 4 2 node parent 5 1 3 2 1 6 3 4 1
5

5 6

6 3
37

parent (predecessor) array

On storing trees
Trees are important parts of flow algorithms

3
Some data structures are expressed as trees

The best implementation of trees depends on what operations need to be performed in the abstract data type.

38

Stacks -- Last In, First Out (LIFO)


Operations: create(S) push(S, j) pop(S) top(S) 6 5 2 7 3 6 5 2 7 3 creates an empty stack S adds j to the top of the stack deletes the top element in S returns the top element in S

pop(S)

pop(S)

5 2 7 3

push(S,9)

2 7 3
39

Queues First in, First Out (FIFO)


Operations: create(Q) Insert(Q, j) Delete(Q) first(Q) 6 6 5 5 5 2 2 2 2 creates an empty queue Q adds j to the end of the queue deletes the first element in Q returns the top element in S 7 7 7 7 3 3 3 3 9
40

Delete(Q) Delete(Q) Insert(Q,9)

Binary Search
In the ordered list of numbers below, stored in an array, determine whether the number 25 is on the list.

10 11 12 13 14

13 17 22 24 27 31 33 36 42 45

Left

Right

41

Binary Search
In the ordered list of numbers below, stored in an array, determine whether the number 25 is on the list.

10 11 12 13 14

13 17 22 24 27 31 33 36 42 45

Left

Left

Right

42

Binary Search
In the ordered list of numbers below, stored in an array, determine whether the number 25 is on the list.

10 11 12 13 14

22 24 27 31 33 36 42 45

Left

Right

Right

After two more iterations, we will determine that 25 is not on the list, but that 24 and 27 are on the list. Running time is O( log n) for running binary search.
43

Summary
Review of data structures Lists, sets, complete binary trees, trees queues, stacks binary search Next Lecture: Search algorithms

44

MITOpenCourseWare http://ocw.mit.edu

15.082J / 6.855J / ESD.78J Network Optimization


Fall 2010

For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.

You might also like