Slide 1

Slide 1 text

Robin Hood Hashing (Pedro Celis, 1986) Papers We Love

Slide 2

Slide 2 text

André Arko this is me, @indirect

Slide 3

Slide 3 text

Robin Hood Hashing

Slide 4

Slide 4 text

Robin Hood Hashing (1986) example hash table data LEIA HAN REY LUKE : ALDERAAN : CORELLIA : JAKKU : TATTOOINE

Slide 5

Slide 5 text

Robin Hood Hashing (1986) example hash table data LEIA HAN REY LUKE

Slide 6

Slide 6 text

Robin Hood Hashing (1986) example hash table data LEIA HAN REY LUKE

Slide 7

Slide 7 text

Robin Hood Hashing (1986) keys hashed to index values LEIA HAN REY LUKE

Slide 8

Slide 8 text

Robin Hood Hashing (1986) keys hashed to index values LEIA HAN REY LUKE

Slide 9

Slide 9 text

Robin Hood Hashing (1986) keys hashed to index values LEIA HAN REY LUKE HASHING ALGORITHM

Slide 10

Slide 10 text

Robin Hood Hashing (1986) keys hashed to index values LEIA HAN REY LUKE HASHING ALGORITHM

Slide 11

Slide 11 text

Robin Hood Hashing (1986) keys hashed to index values LEIA HAN REY LUKE HASHING ALGORITHM 2 4 0 4

Slide 12

Slide 12 text

Robin Hood Hashing (1986) keys hashed to index values LEIA HAN REY LUKE 2 4 0 4

Slide 13

Slide 13 text

Robin Hood Hashing (1986) keys hashed to index values LEIA HAN REY LUKE 2 4 0 4

Slide 14

Slide 14 text

data stored in an array LEIA HAN REY LUKE 2 4 0 4 Robin Hood Hashing (1986)

Slide 15

Slide 15 text

data stored in an array LEIA HAN REY LUKE 2 4 0 4 0 1 2 3 4 Robin Hood Hashing (1986)

Slide 16

Slide 16 text

data stored in an array LEIA HAN REY LUKE 2 4 0 4 0 1 2 3 4 Robin Hood Hashing (1986)

Slide 17

Slide 17 text

data stored in an array LEIA HAN REY LUKE 2 4 0 4 0 1 2 3 4 LEIA:ALDERAAN Robin Hood Hashing (1986)

Slide 18

Slide 18 text

data stored in an array LEIA HAN REY LUKE 2 4 0 4 0 1 2 3 4 LEIA:ALDERAAN Robin Hood Hashing (1986)

Slide 19

Slide 19 text

data stored in an array LEIA HAN REY LUKE 2 4 0 4 0 1 2 3 4 LEIA:ALDERAAN HAN:CORELLIA Robin Hood Hashing (1986)

Slide 20

Slide 20 text

data stored in an array LEIA HAN REY LUKE 2 4 0 4 0 1 2 3 4 LEIA:ALDERAAN HAN:CORELLIA Robin Hood Hashing (1986)

Slide 21

Slide 21 text

data stored in an array LEIA HAN REY LUKE 2 4 0 4 0 1 2 3 4 LEIA:ALDERAAN HAN:CORELLIA REY:JAKKU Robin Hood Hashing (1986)

Slide 22

Slide 22 text

hash collisions LEIA HAN REY LUKE 2 4 0 4 0 1 2 3 4 LEIA:ALDERAAN HAN:CORELLIA REY:JAKKU Robin Hood Hashing (1986)

Slide 23

Slide 23 text

resolving collisions: chaining LEIA HAN REY LUKE 2 4 0 4 0 1 2 3 4 LEIA:ALDERAAN HAN:CORELLIA REY:JAKKU Robin Hood Hashing (1986)

Slide 24

Slide 24 text

0 1 2 3 4 5 resolving collisions: open addressing LEIA HAN REY LUKE 2 4 0 4 LEIA:ALDERAAN HAN:CORELLIA REY:JAKKU Robin Hood Hashing (1986)

Slide 25

Slide 25 text

0 1 2 3 4 5 resolving collisions: open addressing LEIA HAN REY LUKE 2 4 0 4 LEIA:ALDERAAN HAN:CORELLIA + REY:JAKKU LUKE:TATTOOINE Robin Hood Hashing (1986)

Slide 26

Slide 26 text

0 1 2 3 4 5 resolving collisions: open addressing LEIA HAN REY LUKE FINN 2 4 0 4 5 LEIA:ALDERAAN HAN:CORELLIA + REY:JAKKU LUKE:TATTOOINE Robin Hood Hashing (1986)

Slide 27

Slide 27 text

0 1 2 3 4 5 6 Robin Hood Hashing (1986) resolving collisions: open addressing LEIA HAN REY LUKE FINN 2 4 0 4 5 LEIA:ALDERAAN HAN:CORELLIA + REY:JAKKU LUKE:TATTOOINE + FINN:CORUSCANT

Slide 28

Slide 28 text

0 1 2 3 4 5 6 7 8 9 Robin Hood Hashing (1986) resolving collisions: open addressing LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL 2 4 0 4 5 9 6 8 LEIA:ALDERAAN HAN:CORELLIA + REY:JAKKU LUKE:TATTOOINE + FINN:CORUSCANT+ CHEWIE:KASHYYK LANDO:BESPIN MAUL:DATHOMIR

Slide 29

Slide 29 text

0 1 2 3 4 5 6 7 8 9 Robin Hood Hashing (1986) worst-case performance: it’s really bad LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 HAN:CORELLIA + REY:JAKKU LUKE:TATTOOINE + FINN:CORUSCANT+ CHEWIE:KASHYYK LANDO:BESPIN MAUL:DATHOMIR LEIA:ALDERAAN

Slide 30

Slide 30 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) worst-case performance: it’s really bad LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 HAN:CORELLIA + REY:JAKKU LUKE:TATTOOINE + FINN:CORUSCANT+ CHEWIE:KASHYYK+ LANDO:BESPIN+ MAUL:DATHOMIR+ WICKET:ENDOR LEIA:ALDERAAN

Slide 31

Slide 31 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) data 6 slots away from ideal LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 HAN:CORELLIA + REY:JAKKU LUKE:TATTOOINE + FINN:CORUSCANT+ CHEWIE:KASHYYK+ LANDO:BESPIN+ MAUL:DATHOMIR+ WICKET:ENDOR LEIA:ALDERAAN

Slide 32

Slide 32 text

Robin Hood Hashing (1986) as you can probably imagine, this gets very bad, very quickly

Slide 33

Slide 33 text

Robin Hood Hashing (1986) but a hero is on the horizon! Robin Hood Hashing offers vastly more efficient storage

Slide 34

Slide 34 text

Robin Hood Hashing (1986) how much better is it, really? O(ln n) probes, where n is items in the hash

Slide 35

Slide 35 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) data stored in an array with robin hood hashing LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4

Slide 36

Slide 36 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) data stored in an array with robin hood hashing LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 REY:JAKKU 0

Slide 37

Slide 37 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) data stored in an array with robin hood hashing LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 REY:JAKKU 0 LEIA:ALDERAAN 0

Slide 38

Slide 38 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) data stored in an array with robin hood hashing LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 HAN:CORELLIA 0 REY:JAKKU 0 LEIA:ALDERAAN 0

Slide 39

Slide 39 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) data stored in an array with robin hood hashing LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 HAN:CORELLIA 0 REY:JAKKU 0 LUKE:TATTOOINE 1 LEIA:ALDERAAN 0

Slide 40

Slide 40 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) data stored in an array with robin hood hashing LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 HAN:CORELLIA 0 REY:JAKKU 0 LUKE:TATTOOINE 1 FINN:CORUSCANT 1 LEIA:ALDERAAN 0

Slide 41

Slide 41 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) data stored in an array with robin hood hashing LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 HAN:CORELLIA 0 REY:JAKKU 0 LUKE:TATTOOINE 1 FINN:CORUSCANT 1 CHEWIE:KASHYYK 0 LEIA:ALDERAAN 0

Slide 42

Slide 42 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) data stored in an array with robin hood hashing LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 HAN:CORELLIA 0 REY:JAKKU 0 LUKE:TATTOOINE 1 FINN:CORUSCANT 1 CHEWIE:KASHYYK 0 LANDO:BESPIN 1 LEIA:ALDERAAN 0

Slide 43

Slide 43 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) data stored in an array with robin hood hashing LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 HAN:CORELLIA 0 REY:JAKKU 0 LUKE:TATTOOINE 1 FINN:CORUSCANT 1 CHEWIE:KASHYYK 0 LANDO:BESPIN 1 MAUL:DATHOMIR 0 LEIA:ALDERAAN 0

Slide 44

Slide 44 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) data stored in an array with robin hood hashing LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 HAN:CORELLIA 0 REY:JAKKU 0 LUKE:TATTOOINE 1 FINN:CORUSCANT 1 CHEWIE:KASHYYK 0 LANDO:BESPIN 1 MAUL:DATHOMIR 0 LEIA:ALDERAAN 0

Slide 45

Slide 45 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) data stored in an array with robin hood hashing LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 HAN:CORELLIA 0 REY:JAKKU 0 LUKE:TATTOOINE 1 WICKET:ENDOR 2 CHEWIE:KASHYYK 0 LANDO:BESPIN 1 MAUL:DATHOMIR 0 LEIA:ALDERAAN 0

Slide 46

Slide 46 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) data stored in an array with robin hood hashing LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 HAN:CORELLIA 0 REY:JAKKU 0 LUKE:TATTOOINE 1 WICKET:ENDOR 2 CHEWIE:KASHYYK 0 FINN:CORUSCANT 2 MAUL:DATHOMIR 0 LEIA:ALDERAAN 0

Slide 47

Slide 47 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) data stored in an array with robin hood hashing LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 HAN:CORELLIA 0 REY:JAKKU 0 LUKE:TATTOOINE 1 WICKET:ENDOR 2 CHEWIE:KASHYYK 0 FINN:CORUSCANT 2 LANDO:BESPIN 2 LEIA:ALDERAAN 0

Slide 48

Slide 48 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) data stored in an array with robin hood hashing LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 HAN:CORELLIA 0 REY:JAKKU 0 LUKE:TATTOOINE 1 WICKET:ENDOR 2 MAUL:DATHOMIR 1 FINN:CORUSCANT 2 LANDO:BESPIN 2 LEIA:ALDERAAN 0

Slide 49

Slide 49 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) data stored in an array with robin hood hashing LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 HAN:CORELLIA 0 REY:JAKKU 0 LUKE:TATTOOINE 1 WICKET:ENDOR 2 MAUL:DATHOMIR 1 FINN:CORUSCANT 2 LANDO:BESPIN 2 LEIA:ALDERAAN 0 CHEWIE:KASHYYK 1

Slide 50

Slide 50 text

0 1 2 3 4 5 6 7 8 9 10 Robin Hood Hashing (1986) only 2 slots away from ideal LEIA HAN REY LUKE FINN CHEWIE LANDO MAUL WICKET 2 4 0 4 5 9 6 8 4 HAN:CORELLIA 0 REY:JAKKU 0 LUKE:TATTOOINE 1 WICKET:ENDOR 2 MAUL:DATHOMIR 1 FINN:CORUSCANT 2 LANDO:BESPIN 2 LEIA:ALDERAAN 0 CHEWIE:KASHYYK 1

Slide 51

Slide 51 text

Robin Hood Hashing (1986) stealing from the rich and giving to the poor? that’s Robin Hood all over

Slide 52

Slide 52 text

Robin Hood Hashing (1986) further reading ‣ Robin Hood Hashing (1986 original paper) ‣ Robin Hood Hashing with Linear Probing paper (2005) ‣ Paul Khuong experimenting with hashing options (2009) ‣ Paul’s follow-up and conclusions (2011) ‣ Sebastian Sylvan saying robin hood should be the default (2013) ‣ Sebastian following up on slowness after deletions (2013) ‣ Emmanuel Goossaert benchmarking in C++ (2013) ‣ Paul Kuhong again, on linear probing for performance (2013) ‣ Emmanuel benchmarking again after tweaking deletions (2013)

Slide 53

Slide 53 text

Robin Hood Hashing (1986) thanks! slides
 bit.ly/indirect-robin-hood-hashing twitter
 @indirect email
 [email protected]