Download - Purely Functional Data Structures

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