functional data structures · 9/1/2017 · cse 662 - database languages & runtimes immutable...
TRANSCRIPT
![Page 1: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/1.jpg)
CSE 662 - Database Languages & Runtimes
Functional Data Structures
Sept 1, 2017
1
(Multiple diagrams from ‘Purely Functional Datastructures’ by Chris Okasaki)
![Page 2: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/2.jpg)
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
![Page 3: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/3.jpg)
CSE 662 - Database Languages & Runtimes
Mutable vs Immutable
3
X = [ Alice, Bob, Carol, Dave ]
Alice Bob Carol Dave
X[2] := EveThread 1 Thread 2
EveCarol ?
X[2]
![Page 4: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/4.jpg)
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?
![Page 5: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/5.jpg)
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?
![Page 6: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/6.jpg)
CSE 662 - Database Languages & Runtimes
Carol Eve
Immutable Data Structures
6
Alice Bob Dave
Key Insight: Immutable components can be re-used!
![Page 7: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/7.jpg)
CSE 662 - Database Languages & Runtimes
Carol Eve
Immutable Data Structures
7
Alice Bob Dave
Key Insight: Immutable components can be re-used!
![Page 8: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/8.jpg)
CSE 662 - Database Languages & Runtimes
Carol Eve
Immutable Data Structures
8
Alice Bob Dave
Semantics are clearer: Exactly one ‘version’ at any time
![Page 9: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/9.jpg)
CSE 662 - Database Languages & Runtimes
EveCarol
Immutable Data Structures
9
Alice Bob Dave
Data is added, not replaced: No cache coherency problems
![Page 10: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/10.jpg)
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)
![Page 11: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/11.jpg)
CSE 662 - Database Languages & Runtimes
Linked Lists
11
xs = pop(xs)
ys = push(ys,1)
Only xs and ys need to change
![Page 12: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/12.jpg)
CSE 662 - Database Languages & Runtimes
Linked Lists
12
zs = append(xs,ys)
This entire part needs to be rewritten
![Page 13: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/13.jpg)
CSE 662 - Database Languages & Runtimes
Linked Lists
13
![Page 14: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/14.jpg)
CSE 662 - Database Languages & Runtimes
Class Exercise 1
14
How would you implement update(list, index, value)
![Page 15: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/15.jpg)
CSE 662 - Database Languages & Runtimes
Class Exercise 2
15
Implement a set with:
set init()boolean member(set, elem)set insert(set, elem)
![Page 16: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/16.jpg)
CSE 662 - Database Languages & Runtimes
Lazy Evaluation
16
Can we do better?
![Page 17: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/17.jpg)
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)
![Page 18: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/18.jpg)
CSE 662 - Database Languages & Runtimes
Class Exercise 3
18
Make it better!
![Page 19: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/19.jpg)
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?
![Page 20: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/20.jpg)
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
![Page 21: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/21.jpg)
CSE 662 - Database Languages & Runtimes
Amortized Analysis
• Allow operation A to ‘pay it forward’ for another operation B that hasn’t happened yet
• A’s time complexity goes up by X.
• B’s time complexity goes down by X.
21
![Page 22: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/22.jpg)
CSE 662 - Database Languages & Runtimes
Example: Amortized Queues
22
Preliminaries: Implement an efficient enqueue()/dequeue()
![Page 23: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/23.jpg)
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?
![Page 24: Functional Data Structures · 9/1/2017 · CSE 662 - Database Languages & Runtimes Immutable Data Structures • Once an object is created, it never changes. • When all pointers](https://reader034.vdocuments.net/reader034/viewer/2022050518/5fa1a7445bc8a5406c4342d8/html5/thumbnails/24.jpg)
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