functional data structures
play

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


  1. Functional Data Structures Sept 1, 2017 (Multiple diagrams from ‘Purely Functional Datastructures’ by Chris Okasaki) CSE 662 - Database Languages & Runtimes 1

  2. Mutable vs Immutable X = [ Alice, Bob, Carol, Dave ] Alice Bob Carol Eve Dave X[2] Carol X[2] := Eve CSE 662 - Database Languages & Runtimes 2

  3. Mutable vs Immutable X = [ Alice, Bob, Carol, Dave ] Alice Bob Carol Dave Thread 1 Thread 2 X[2] := Eve X[2] ? Carol Eve CSE 662 - Database Languages & Runtimes 3

  4. Mutable Datastructures • The programmer’s intended ordering is unclear • Atomicity/Correctness requires locking • Versioning requires copying the data structure • Cache coherency is expensive! Can these problems be avoided? CSE 662 - Database Languages & Runtimes 4

  5. Immutable Data Structures 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? CSE 662 - Database Languages & Runtimes 5

  6. Immutable Data Structures Alice Bob Carol Dave Eve Key Insight: Immutable components can be re-used! CSE 662 - Database Languages & Runtimes 6

  7. Immutable Data Structures Alice Bob Carol Dave Eve Key Insight: Immutable components can be re-used! CSE 662 - Database Languages & Runtimes 7

  8. Immutable Data Structures Alice Bob Carol Dave Eve Semantics are clearer: Exactly one ‘version’ at any time CSE 662 - Database Languages & Runtimes 8

  9. Immutable Data Structures Alice Bob Carol Dave Eve Data is added, not replaced: No cache coherency problems CSE 662 - Database Languages & Runtimes 9

  10. Immutable Data Structures (a.k.a. ‘Functional’ or ‘Persistent’ 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) CSE 662 - Database Languages & Runtimes 10

  11. Linked Lists xs = pop(xs) ys = push(ys,1) Only xs and ys need to change CSE 662 - Database Languages & Runtimes 11

  12. Linked Lists zs = append(xs,ys) This entire part needs to be rewritten CSE 662 - Database Languages & Runtimes 12

  13. Linked Lists CSE 662 - Database Languages & Runtimes 13

  14. Class Exercise 1 How would you implement update(list, index, value) CSE 662 - Database Languages & Runtimes 14

  15. Class Exercise 2 Implement a set with: set init() boolean member(set, elem) set insert(set, elem) CSE 662 - Database Languages & Runtimes 15

  16. Lazy Evaluation Can we do better? CSE 662 - Database Languages & Runtimes 16

  17. Putting Off Work Fast x = “expensive()” (just saving a ‘todo’) Slow print x (performing the ‘todo’) Fast print x (‘todo’ already done) CSE 662 - Database Languages & Runtimes 17

  18. Class Exercise 3 Make it better! CSE 662 - Database Languages & Runtimes 18

  19. Putting Off Work 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? CSE 662 - Database Languages & Runtimes 19

  20. Lazy Evaluation • Save work for later… • … and avoid work that is never required. • … to spread work out over multiple calls. • … for better ‘amortized’ costs. CSE 662 - Database Languages & Runtimes 20

  21. 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. CSE 662 - Database Languages & Runtimes 21

  22. Example: Amortized Queues Preliminaries: Implement an efficient enqueue() / dequeue() CSE 662 - Database Languages & Runtimes 22

  23. Example: Amortized Queues ‘current’ queue ‘todo’ stack enqueue() : Push onto ‘todo’ stack What is the cost? dequeue() : Pop ‘current’ queue if empty, reverse ‘todo’ stack to make new ‘current’ queue What is the cost? CSE 662 - Database Languages & Runtimes 23

  24. Example: Amortized Queues ‘current’ queue ‘todo’ stack enqueue() : Push onto ‘todo’ stack push() is O(1) + 1 credit dequeue() : Pop ‘current’ queue if empty, reverse ‘todo’ stack to make new ‘current’ queue Pop is O(1); Reverse uses N credits for O(1) amortized CSE 662 - Database Languages & Runtimes 24

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend