Purely Functional Data Structures

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

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 of Purely Functional Data Structures

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