implementing abstractions...an initial idea 4 2 allocated length logical length element array 137 42...

155
Implementing Abstractions Part Two

Upload: others

Post on 17-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Implementing AbstractionsPart Two

Page 2: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Friday Four Square!4:15PM, Outside Gates

Page 3: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

0

allocatedlength

logicallength

elementarray

Page 4: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

1

allocatedlength

logicallength

elementarray

137

Page 5: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

2

allocatedlength

logicallength

elementarray

137 42

Page 6: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

3

allocatedlength

logicallength

elementarray

137 42 2718

Page 7: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

4

allocatedlength

logicallength

elementarray

137 42 2718 512

Page 8: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

3

allocatedlength

logicallength

elementarray

137 42 2718 512

Page 9: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

2

allocatedlength

logicallength

elementarray

137 42 5122718

Page 10: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

3

allocatedlength

logicallength

elementarray

137 42 161 512

Page 11: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

Page 12: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Running out of Space

● Our current implementation very quickly runs out of space to store elements.

● What should we do when this happens?

Page 13: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

2

allocatedlength

logicallength

elementarray

137 42

Page 14: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

3

allocatedlength

logicallength

elementarray

137 42 161

Page 15: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

Page 16: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

Page 17: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

137

Page 18: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

137 42

Page 19: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

137 42 161

Page 20: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

137 42 161 314

Page 21: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

137 42 161 314

Page 22: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

Page 23: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

Page 24: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

5

4

allocatedlength

logicallength

elementarray

137 42 161 314

Page 25: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

5

5

allocatedlength

logicallength

elementarray

137 42 161 314 159

Page 26: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

5

5

allocatedlength

logicallength

elementarray

137 42 161 314 159

Page 27: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

5

5

allocatedlength

logicallength

elementarray

137 42 161 314 159

137

Page 28: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

5

5

allocatedlength

logicallength

elementarray

137 42 161 314 159

137 42

Page 29: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

5

5

allocatedlength

logicallength

elementarray

137 42 161 314 159

137 42 161

Page 30: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

5

5

allocatedlength

logicallength

elementarray

137 42 161 314 159

137 42 161 314

Page 31: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

5

5

allocatedlength

logicallength

elementarray

137 42 161 314 159

137 42 161 314 159

Page 32: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

5

5

allocatedlength

logicallength

elementarray

137 42 161 314 159

137 42 161 314 159

Page 33: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

5

5

allocatedlength

logicallength

elementarray

137 42 161 314 159

Page 34: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

5

5

allocatedlength

logicallength

elementarray

137 42 161 314 159

Page 35: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

6

5

allocatedlength

logicallength

elementarray

137 42 161 314 159

Page 36: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

An Initial Idea

6

6

allocatedlength

logicallength

elementarray

137 42 161 314 159 265

Page 37: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Ready... set... grow!

Page 38: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Analyzing Our Approach

● We now have a working solution, but is it an efficient solution?

● Let's analyze the big-O complexity of the five operations.● size: O(1)● isEmpty: O(1)● push: O(n)● pop: O(1)● top: O(1)

Page 39: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Analyzing Our Approach

● We now have a working solution, but is it an efficient solution?

● Let's analyze the big-O complexity of the five operations.● size: O(1)● isEmpty: O(1)● push: O(n)● pop: O(1)● top: O(1)

Page 40: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

What This Means

● What is the complexity of pushing n elements and then popping them?

Cost of the pushes:

1 + 2 + 3 + 4 + … + n = O(n2)

Cost of the pops:

1 +1 + 1 + 1 + … + 1 = O(n)

Total cost: O(n2)

Page 41: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

What This Means

● What is the complexity of pushing n elements and then popping them?

● Cost of the pushes:● 1 + 2 + 3 + 4 + … + n = O(n2)

Cost of the pops:

1 +1 + 1 + 1 + … + 1 = O(n)

Total cost: O(n2)

Page 42: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

What This Means

● What is the complexity of pushing n elements and then popping them?

● Cost of the pushes:● 1 + 2 + 3 + 4 + … + n = O(n2)

Cost of the pops:

1 +1 + 1 + 1 + … + 1 = O(n)

Total cost: O(n2)

Page 43: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

What This Means

● What is the complexity of pushing n elements and then popping them?

● Cost of the pushes:● 1 + 2 + 3 + 4 + … + n = O(n2)

● Cost of the pops:● 1 + 1 + 1 + 1 + … + 1 = O(n)

Total cost: O(n2)

Page 44: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

What This Means

● What is the complexity of pushing n elements and then popping them?

● Cost of the pushes:● 1 + 2 + 3 + 4 + … + n = O(n2)

● Cost of the pops:● 1 + 1 + 1 + 1 + … + 1 = O(n)

Total cost: O(n2)

Page 45: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

What This Means

● What is the complexity of pushing n elements and then popping them?

● Cost of the pushes:● 1 + 2 + 3 + 4 + … + n = O(n2)

● Cost of the pops:● 1 + 1 + 1 + 1 + … + 1 = O(n)

● Total cost: O(n2)

Page 46: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

What This Means

● What is the complexity of pushing n elements and then popping them?

● Cost of the pushes:● 1 + 2 + 3 + 4 + … + n = O(n2)

● Cost of the pops:● 1 + 1 + 1 + 1 + … + 1 = O(n)

● Total cost: O(n2)

Page 47: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Validating Our Model

Page 48: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Speeding up the Stack

Page 49: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

Page 50: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

Page 51: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

137

Page 52: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

137 42

Page 53: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

137 42 161

Page 54: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

137 42 161 314

Page 55: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

137 42 161 314

Page 56: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

Page 57: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 161 314

Page 58: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Better Idea

6

4

allocatedlength

logicallength

elementarray

137 42 161 314

Page 59: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Better Idea

6

5

allocatedlength

logicallength

elementarray

137 42 161 314 159

Page 60: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Better Idea

6

6

allocatedlength

logicallength

elementarray

137 42 161 314 159 265

Page 61: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

What Just Happened?

● Half of our pushes are now “easy” pushes, and half of our pushes are now “hard” pushes.

● Hard pushes still take time O(n).● Easy pushes only take time O(1).● Worst-case is still O(n).● What about the average case?

Page 62: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Analyzing the Work

Page 63: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Analyzing the Work

Page 64: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Analyzing the Work

We cut down the amount of work by roughly one

half!

We cut down the amount of work by roughly one

half!

Page 65: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Different Analysis

Page 66: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Different Analysis

Page 67: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Different Analysis

Page 68: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Different Analysis

Page 69: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Different Analysis

Page 70: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Different Analysis

Page 71: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Different Analysis

Page 72: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Different Analysis

We cut down the amount of work by roughly one

half!

We cut down the amount of work by roughly one

half!

Page 73: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

How does it stack up?

Page 74: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

2

2

allocatedlength

logicallength

elementarray

137 42

Page 75: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

2

2

allocatedlength

logicallength

elementarray

137 42

Page 76: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

2

2

allocatedlength

logicallength

elementarray

137 42

137

Page 77: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

2

2

allocatedlength

logicallength

elementarray

137 42

137 42

Page 78: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

2

2

allocatedlength

logicallength

elementarray

137 42

137 42

Page 79: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

2

2

allocatedlength

logicallength

elementarray

137 42

Page 80: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

2

2

allocatedlength

logicallength

elementarray

137 42

Page 81: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

4

2

allocatedlength

logicallength

elementarray

137 42

Page 82: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

4

3

allocatedlength

logicallength

elementarray

137 42 271

Page 83: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 271 828

Page 84: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 271 828

Page 85: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 271 828

137

Page 86: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 271 828

137 42

Page 87: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 271 828

137 42 271

Page 88: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 271 828

137 42 271 828

Page 89: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 271 828

137 42 271 828

Page 90: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 271 828

Page 91: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

4

4

allocatedlength

logicallength

elementarray

137 42 271 828

Page 92: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

8

4

allocatedlength

logicallength

elementarray

137 42 271 828

Page 93: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

8

5

allocatedlength

logicallength

elementarray

137 42 271 828 182

Page 94: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

8

6

allocatedlength

logicallength

elementarray

137 42 271 828 182 845

Page 95: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

8

7

allocatedlength

logicallength

elementarray

137 42 271 828 182 845 904

Page 96: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

A Much Better Idea

8

8

allocatedlength

logicallength

elementarray

137 42 271 828 182 845 904 5

Page 97: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Let's Give it a Try!

Page 98: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

How do we analyze this?

Page 99: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Spreading the Work

Page 100: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Spreading the Work

Page 101: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Spreading the Work

Page 102: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Spreading the Work

Page 103: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Spreading the Work

Page 104: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Spreading the Work

Page 105: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Spreading the Work

Page 106: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Spreading the Work

Page 107: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Spreading the Work

Page 108: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Spreading the Work

Page 109: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Spreading the Work

On average, we do just 3 units of work!

This is O(1) work on average!

On average, we do just 3 units of work!

This is O(1) work on average!

Page 110: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Sharing the Burden

● We still have “heavy” pushes taking time O(n) and “light” pushes taking time O(1).

● Worst-case time for a push is O(n).● Heavy pushes become so rare that the

average time for a push is O(1).● Can we confirm this?

Page 111: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Amortized Analysis

● The analysis we have just done is called an amortized analysis.

● Reason about the total amount of work done, not the word done per operation.

● In an amortized sense, our implementation of the stack is extremely fast!

● This is one of the most common approaches to implementing Stack.

Page 112: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Implementing Queue

Page 113: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Implementing Queue

● We've just used dynamic arrays to implement a stack. Could we use them to implement a queue?

● Yes, but here's a better idea: could we use our stack to implement a queue?

Page 114: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

Out In

Page 115: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1Out In

Page 116: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1Out In

2

Page 117: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1Out In

2

3

Page 118: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1Out In

2

3

4

Page 119: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1Out In

2

3

4

Page 120: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1Out In

2

3

4

Page 121: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1In

2

3

4Out

Page 122: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1In

2

3

4Out

Page 123: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1In

2

3

4Out

Page 124: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1In

23

4Out

Page 125: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1In

2

3

4Out

Page 126: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1In

2

3

4Out

Page 127: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1In

2

3

4Out

Page 128: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1

In

2

3

4Out

Page 129: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1

In

2

3

4Out

Page 130: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1

In

2

3

4Out

Page 131: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

1

In

2

3

4Out

Page 132: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

In

2

3

4Out

11

Page 133: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

In

2

3

4Out

1

Page 134: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

In

3

4Out

1 21 2

Page 135: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

3

4Out

5In

1 2

Page 136: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

3

4Out

5In

6

1 2

Page 137: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

3

4Out

5In

6

1 2

Page 138: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

4Out

5In

6

1 2 3

Page 139: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

4Out

5In

6

7

1 2 3

Page 140: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

4

Out

5In

6

7

1 2 3

Page 141: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

Out

5In

6

7

1 2 3 41 2 3 4

Page 142: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

Out

5In

6

7

1 2 3 4

Page 143: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

Out

5In

6

7

1 2 3 4

Page 144: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

5In

6

7Out

1 2 3 4

Page 145: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

5In

6

7Out

1 2 3 4

Page 146: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

5In

6

7Out

1 2 3 4

Page 147: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

5In

6

7Out

1 2 3 4

Page 148: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

5

In

6

7Out

1 2 3 4

Page 149: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

5

In

6

7Out

1 2 3 4

Page 150: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

5

In

6

7Out

1 2 3 4

Page 151: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

5

In

6

7Out

1 2 3 4

Page 152: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

In

6

7Out

1 2 3 4 5

Page 153: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

The Two-Stack Queue

● Maintain two stacks, an In stack and an Out stack.

● To enqueue an element, push it onto the In stack.

● To dequeue an element:● If the Out stack is empty, pop everything off

the In stack and push it onto the Out stack.● Pop the Out stack and return its value.

Page 154: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Analyzing Efficiency

● How efficient is our two-stack queue?

● All enqueues just do one push.

● A dequeue might do a lot of pushes and a lot of pops.

● However, let's do an amortized analysis:● Each element is pushed at most twice and popped at

most twice.● n enqueues and n dequeues thus do at most 4n

pushes and pops.● Any 4n pushes / pops takes O(n) amortized time.● Amortized cost: O(1) per operation.

Page 155: Implementing Abstractions...An Initial Idea 4 2 allocated length logical length element array 137 42 An Initial Idea 4 3 allocated length logical length element array 137 42 2718 An

Next Time

● Linked Lists● A different way to represent sequences of

elements.

● Dynamic Allocation Revisited● What else can we allocate?