Functional Data Structures Sept 1, 2017 (Multiple diagrams from - - PowerPoint PPT Presentation

functional data structures
SMART_READER_LITE
LIVE PREVIEW

Functional Data Structures Sept 1, 2017 (Multiple diagrams from - - PowerPoint PPT Presentation

Functional Data Structures Sept 1, 2017 (Multiple diagrams from Purely Functional Datastructures by Chris Okasaki) CSE 662 - Database Languages & Runtimes 1 Mutable vs Immutable X = [ Alice, Bob, Carol, Dave ] Alice Bob Carol


slide-1
SLIDE 1

CSE 662 - Database Languages & Runtimes

Functional Data Structures

Sept 1, 2017

1

(Multiple diagrams from ‘Purely Functional Datastructures’ by Chris Okasaki)

slide-2
SLIDE 2

CSE 662 - Database Languages & Runtimes

Mutable vs Immutable

2

X = [ Alice, Bob, Carol, Dave ]

Alice Bob Carol Dave

X[2]

Carol

X[2] := Eve

Eve

slide-3
SLIDE 3

CSE 662 - Database Languages & Runtimes

Mutable vs Immutable

3

X = [ Alice, Bob, Carol, Dave ]

Alice Bob Carol Dave

X[2] := Eve Thread 1 Thread 2

Eve Carol

? X[2]

slide-4
SLIDE 4

CSE 662 - Database Languages & Runtimes

Mutable Datastructures

  • The programmer’s intended ordering is unclear
  • Atomicity/Correctness requires locking
  • Versioning requires copying the data structure
  • Cache coherency is expensive!

4

Can these problems be avoided?

slide-5
SLIDE 5

CSE 662 - Database Languages & Runtimes

Immutable Data Structures

5

X = [ Alice, Bob, Carol, Dave ]

Alice Bob Carol Dave

X[2]

Carol

X[2] := Eve Don’t allow writes! But what if we need to update the structure?

slide-6
SLIDE 6

CSE 662 - Database Languages & Runtimes

Carol Eve

Immutable Data Structures

6

Alice Bob Dave

Key Insight: Immutable components can be re-used!

slide-7
SLIDE 7

CSE 662 - Database Languages & Runtimes

Carol Eve

Immutable Data Structures

7

Alice Bob Dave

Key Insight: Immutable components can be re-used!

slide-8
SLIDE 8

CSE 662 - Database Languages & Runtimes

Carol Eve

Immutable Data Structures

8

Alice Bob Dave

Semantics are clearer: Exactly one ‘version’ at any time

slide-9
SLIDE 9

CSE 662 - Database Languages & Runtimes

Eve Carol

Immutable Data Structures

9

Alice Bob Dave

Data is added, not replaced: No cache coherency problems

slide-10
SLIDE 10

CSE 662 - Database Languages & Runtimes

Immutable Data Structures

  • Once an object is created, it never changes.
  • When all pointers to an object go away, the object

is garbage collected.

  • Only the ‘root’ pointer can ever change (to point to

a new version of the data structure)

10

(a.k.a. ‘Functional’ or ‘Persistent’ Data Structures)

slide-11
SLIDE 11

CSE 662 - Database Languages & Runtimes

Linked Lists

11

xs = pop(xs) ys = push(ys,1) Only xs and ys need to change

slide-12
SLIDE 12

CSE 662 - Database Languages & Runtimes

Linked Lists

12

zs = append(xs,ys)

This entire part needs to be rewritten

slide-13
SLIDE 13

CSE 662 - Database Languages & Runtimes

Linked Lists

13

slide-14
SLIDE 14

CSE 662 - Database Languages & Runtimes

Class Exercise 1

14

How would you implement update(list, index, value)

slide-15
SLIDE 15

CSE 662 - Database Languages & Runtimes

Class Exercise 2

15

Implement a set with: set init() boolean member(set, elem) set insert(set, elem)

slide-16
SLIDE 16

CSE 662 - Database Languages & Runtimes

Lazy Evaluation

16

Can we do better?

slide-17
SLIDE 17

CSE 662 - Database Languages & Runtimes

Putting Off Work

17

x = “expensive()” print x print x

Fast (just saving a ‘todo’) Slow (performing the ‘todo’) Fast (‘todo’ already done)

slide-18
SLIDE 18

CSE 662 - Database Languages & Runtimes

Class Exercise 3

18

Make it better!

slide-19
SLIDE 19

CSE 662 - Database Languages & Runtimes

Putting Off Work

19

concatenate(a, b) { a’, front = pop(a) if a’ is empty return (front, b) else return (front, “concatenate(a’,b)”) } What is the time complexity of concatenate? What happens to reads?

slide-20
SLIDE 20

CSE 662 - Database Languages & Runtimes

Lazy Evaluation

  • Save work for later…
  • … and avoid work that is never required.
  • … to spread work out over multiple calls.
  • … for better ‘amortized’ costs.

20

slide-21
SLIDE 21

CSE 662 - Database Languages & Runtimes

Amortized Analysis

  • Allow operation A to ‘pay it forward’ for another
  • peration B that hasn’t happened yet
  • A’s time complexity goes up by X.
  • B’s time complexity goes down by X.

21

slide-22
SLIDE 22

CSE 662 - Database Languages & Runtimes

Example: Amortized Queues

22

Preliminaries: Implement an efficient enqueue()/dequeue()

slide-23
SLIDE 23

CSE 662 - Database Languages & Runtimes

Example: Amortized Queues

23

enqueue(): Push onto ‘todo’ stack ‘current’ queue ‘todo’ stack dequeue(): Pop ‘current’ queue if empty, reverse ‘todo’ stack to make new ‘current’ queue What is the cost? What is the cost?

slide-24
SLIDE 24

CSE 662 - Database Languages & Runtimes

Example: Amortized Queues

24

enqueue(): Push onto ‘todo’ stack ‘current’ queue ‘todo’ stack dequeue(): Pop ‘current’ queue if empty, reverse ‘todo’ stack to make new ‘current’ queue push() is O(1) + 1 credit Pop is O(1); Reverse uses N credits for O(1) amortized