purely functional data structures

23
Purely Functional Data Structures Jean-Baptiste Mazon Riviera Func 2013-05-21

Upload: jean-baptiste-mazon

Post on 31-May-2015

99 views

Category:

Science


1 download

DESCRIPTION

Original slides of my 2013-05-21 talk at Riviera Func. I've got a much improved release of it here: https://docs.google.com/presentation/d/11jFHionOcw-TPII8WaLG-enFKdCCollgZXZEkBYjjcM/pub?start=false&loop=false&delayms=3000 (I still haven't found the right way to copy it over to slideshare while keeping the animations tolerable—get in touch if you know how)

TRANSCRIPT

Page 1: Purely Functional Data Structures

Purely Functional Data StructuresJean-Baptiste MazonRiviera Func 2013-05-21

Page 2: Purely Functional Data Structures

OHAI

Jean-Baptiste Mazon@jbmazon

Sophia-AntipolisPL

(Google Docs)

Page 3: Purely Functional Data Structures

Purely Functional Data Structures

About — What — Why — How

Page 4: Purely Functional Data Structures

Persistence

● ephemeral● partially persistent● fully persistent● confluently persistent

immutable data ⇒ fully persistent structures

Page 5: Purely Functional Data Structures

Persistence: linked lists

Page 6: Purely Functional Data Structures

Persistence: concatenated lists

Page 7: Purely Functional Data Structures

Persistence: binary search tree

Page 8: Purely Functional Data Structures

Persistence: insertion

Page 9: Purely Functional Data Structures

Amortization

Mutable textbook example: autosized vector

Okasaki examples:● queues● binomial heaps● splay heaps● pairing heaps

Okasaki examples:● queues● binomial heaps● splay heaps● pairing heaps

Page 10: Purely Functional Data Structures

Naive queue

1 2 3 n-2 n-1 n

Page 11: Purely Functional Data Structures

Amortized queue

...breaks with persistence

1 2 3

n-2n-1n

Page 12: Purely Functional Data Structures

Persistence and Amortization

execution traceexpensive operation

call-by-valuecall-by-namecall-by-need

stream

Page 13: Purely Functional Data Structures

Lazy Evaluation

1 2 3

321

f

r

Page 14: Purely Functional Data Structures

Persistent Amortized Queue

1 1f r

better than amortized?

Page 15: Purely Functional Data Structures

Realtime Queue

problem with reverse

rotate(f,r,a) = f ++ reverse(r) ++ arotate(f|fs,r|rs,a) = f | rotate(fs,rs,r|a)

“scheduling”

Page 16: Purely Functional Data Structures

Numerics

Lists

List =● Empty● Cons(e,List)

Peano arithmetic

Nat =● Zero● Succ(Nat)

Page 17: Purely Functional Data Structures

Numerics: random access list

… but cons, head, tail are O(lg N)

0 1 2 3 4 5 6, ,

Page 18: Purely Functional Data Structures

Numerics: zeroless

how

consequence on listconsequence on first tree

head O(1)tail and cons O(1)?

Page 19: Purely Functional Data Structures

Numerics: redundancy

22222111111011111

Page 20: Purely Functional Data Structures

Numerics: quaternary

Page 21: Purely Functional Data Structures

But wait, there's more!

● not only queues● skew binary● bootstrapping● implicit recursive

slowdown

Page 22: Purely Functional Data Structures

KTHXBYE

Page 23: Purely Functional Data Structures

Image Credits

Alexberlioz [CC-BY-SA-3.0], from Wikimedia CommonsMarc NL [Public domain], from Wikimedia CommonsJ.J. [CC-BY-SA-3.0], from Wikimedia Commons