L i n k e d l i s t s ( 6 . 5 , 1 6 ) L i n k - - PowerPoint PPT Presentation
L i n k e d l i s t s ( 6 . 5 , 1 6 ) L i n k - - PowerPoint PPT Presentation
L i n k e d l i s t s ( 6 . 5 , 1 6 ) L i n k e d l i s t s I n s e r t i n g a n d r e m o v i n g e l e m e n t s i n t h e m i d d l e o f a d y n a m i c a r r a
L i n k e d l i s t s
I n s e r t i n g a n d r e m
- v
i n g e l e m e n t s i n t h e m i d d l e
- f
a d y n a m i c a r r a y t a k e s O ( n ) t i m e
- (
t h
- u
g h i n s e r t i n g a t t h e e n d t a k e s O ( 1 ) t i m e )
- (
a n d y
- u
c a n a l s
- d
e l e t e f r
- m
t h e m i d d l e i n O ( 1 ) t i m e i f y
- u
d
- n
' t c a r e a b
- u
t p r e s e r v i n g t h e
- r
d e r )
A l i n k e d l i s t s u p p
- r
t s i n s e r t i n g a n d d e l e t i n g e l e m e n t s f r
- m
a n y p
- s
i t i
- n
i n c
- n
s t a n t t i m e
- B
u t i t t a k e s O ( n ) t i m e t
- a
c c e s s a s p e c i fj c p
- s
i t i
- n
i n t h e l i s t
S i n g l y
- l
i n k e d l i s t s
A s i n g l y
- l
i n k e d l i s t i s m a d e u p
- f
n
- d
e s , w h e r e e a c h n
- d
e c
- n
t a i n s :
- s
- m
e d a t a ( t h e n
- d
e ' s v a l u e )
- a
l i n k ( r e f e r e n c e ) t
- t
h e n e x t n
- d
e i n t h e l i s t
c l a s s N
- d
e < E > { E d a t a ; N
- d
e < E > n e x t ; }
S i n g l y
- l
i n k e d l i s t s
L i n k e d
- l
i s t r e p r e s e n t a t i
- n
- f
t h e l i s t [ “ T
- m
” , “ D i c k ” , “ H a r r y ” , “ S a m ” ] :
L i s t i t s e l f i s j u s t a r e f e r e n c e t
- t
h e fj r s t n
- d
e
O p e r a t i
- n
s
- n
l i n k e d l i s t s
/ / I n s e r t i t e m a t f r
- n
t
- f
l i s t v
- i
d a d d F i r s t ( E i t e m ) / / I n s e r t i t e m a f t e r a n
- t
h e r i t e m v
- i
d a d d A f t e r ( N
- d
e < E > n
- d
e , E i t e m ) / / R e m
- v
e f i r s t i t e m v
- i
d r e m
- v
e F i r s t ( ) / / R e m
- v
e i t e m a f t e r a n
- t
h e r i t e m v
- i
d r e m
- v
e A f t e r ( N
- d
e < E > n
- d
e )
E x a m p l e l i s t
h e a d = S L L i s t < S t r i n g > n e x t = d a t a = " T
- m
" N
- d
e < S t r i n g > n e x t = d a t a = " D i c k " N
- d
e < S t r i n g >
E x a m p l e
- f
a d d F i r s t ( E i t e m )
h e a d = S L L i s t < S t r i n g > n e x t = d a t a = " T
- m
" N
- d
e < S t r i n g > n e x t = d a t a = " D i c k " N
- d
e < S t r i n g >
C a l l i n g a d d F i r s t ( “ A n n ” ) :
n e x t = d a t a = " A n n " N
- d
e < S t r i n g >
i t e m
i t e m . n e x t = h e a d ; h e a d = i t e m ;
E x a m p l e
- f
a d d A f t e r
h e a d = S L L i s t < S t r i n g > n e x t = d a t a = " T
- m
" N
- d
e < S t r i n g > n e x t = d a t a = " D i c k " N
- d
e < S t r i n g >
C a l l i n g a d d A f t e r ( t
- m
, “ A n n ” ) :
next = data = "Ann"
N
- d
e < S t r i n g >
i t e m
n e x t = d a t a = " A n n "
i t e m n
- d
e
i t e m . n e x t = n
- d
e . n e x t ; n
- d
e . n e x t = i t e m ;
E x a m p l e
- f
r e m
- v
e F i r s t
h e a d = S L L i s t < S t r i n g > n e x t = d a t a = " T
- m
" N
- d
e < S t r i n g > n e x t = d a t a = " D i c k " N
- d
e < S t r i n g >
C a l l i n g r e m
- v
e F i r s t ( ) :
n
- d
e t
- b
e r e m
- v
e d
h e a d = h e a d . n e x t ;
E x a m p l e
- f
r e m
- v
e A f t e r
h e a d = S L L i s t < S t r i n g > n e x t = d a t a = " T
- m
" N
- d
e < S t r i n g > n e x t = d a t a = " D i c k " N
- d
e < S t r i n g >
C a l l i n g r e m
- v
e A f t e r ( t
- m
) :
n e x t = d a t a = " A n n " N
- d
e < S t r i n g >
n
- d
e t
- b
e r e m
- v
e d n
- d
e
n
- d
e . n e x t = n
- d
e . n e x t . n e x t ;
A p r
- b
l e m
I t ' s b a d A P I d e s i g n t
- n
e e d b
- t
h a d d F i r s t a n d a d d A f t e r ( l i k e w i s e r e m
- v
e F i r s t a n d r e m
- v
e A f t e r ) :
- T
w i c e a s m u c h c
- d
e t
- w
r i t e – t w i c e a s m a n y p l a c e s t
- i
n t r
- d
u c e b u g s !
- U
s e r s
- f
t h e l i s t l i b r a r y w i l l n e e d s p e c i a l c a s e s i n t h e i r c
- d
e f
- r
d e a l i n g w i t h t h e fj r s t n
- d
e
I d e a : a d d a h e a d e r n
- d
e , a f a k e n
- d
e t h a t s i t s a t t h e f r
- n
t
- f
t h e l i s t b u t d
- e
s n ' t c
- n
t a i n a n y d a t a I n s t e a d
- f
a d d F i r s t ( x ) , w e c a n d
- a
d d A f t e r ( h e a d e r N
- d
e , x )
L i s t w i t h h e a d e r n
- d
e ( 1 6 . 1 . 1 )
I f w e w a n t t
- a
d d “ A n n ” b e f
- r
e “ T
- m
” , w e c a n d
- a
d d A f t e r ( h e a d , “ A n n ” )
h e a d = S L L i s t < S t r i n g > n e x t = d a t a = " T
- m
" N
- d
e < S t r i n g > n e x t = n u l l d a t a = " D i c k " N
- d
e < S t r i n g > n e x t = d a t a = N
- d
e < S t r i n g >
Tie h e a d e r n
- d
e !
D
- u
b l y
- l
i n k e d l i s t s
I n a s i n g l y
- l
i n k e d l i s t y
- u
c a n
- n
l y g
- f
- r
w a r d s t h r
- u
g h t h e l i s t :
- I
f y
- u
' r e a t a n
- d
e , a n d w a n t t
- fj
n d t h e p r e v i
- u
s n
- d
e , t
- b
a d ! O n l y w a y i s t
- s
e a r c h f
- r
w a r d f r
- m
t h e b e g i n n i n g
- f
t h e l i s t
I n a d
- u
b l y
- l
i n k e d l i s t , e a c h n
- d
e h a s a l i n k t
- t
h e n e x t a n d t h e p r e v i
- u
s n
- d
e s Y
- u
c a n i n O ( 1 ) t i m e :
- g
- f
- r
w a r d s a n d b a c k w a r d s t h r
- u
g h t h e l i s t
- i
n s e r t a n
- d
e b e f
- r
e
- r
a f t e r t h e c u r r e n t
- n
e
- m
- d
i f y
- r
d e l e t e t h e c u r r e n t n
- d
e
Tie “ c l a s s i c ” d a t a s t r u c t u r e f
- r
s e q u e n t i a l a c c e s s
A d
- u
b l y
- l
i n k e d l i s t
E a c h n
- d
e l i n k s t
- t
h e n e x t a n d t h e p r e v i
- u
s n
- d
e Tie l i s t i t s e l f l i n k s t
- t
h e fj r s t a n d l a s t n
- d
e s
I n s e r t i
- n
a n d d e l e t i
- n
i n d
- u
b l y
- l
i n k e d l i s t s
S i m i l a r t
- s
i n g l y
- l
i n k e d l i s t s , b u t y
- u
h a v e t
- u
p d a t e t h e p r e v p
- i
n t e r t
- .
T
- d
e l e t e t h e c u r r e n t n
- d
e t h e i d e a i s :
n
- d
e . n e x t . p r e v = n
- d
e . p r e v ; n
- d
e . p r e v . n e x t = n
- d
e . n e x t ;
n e x t = p r e v = d a t a = " D i c k " N
- d
e < S t r i n g > n e x t = p r e v = d a t a = " A n n " N
- d
e < S t r i n g > n e x t = p r e v = d a t a = “ T
- m
” N
- d
e < S t r i n g >
I n s e r t i
- n
a n d d e l e t i
- n
i n d
- u
b l y
- l
i n k e d l i s t s , c
- n
t i n u e d
T
- d
e l e t e t h e c u r r e n t n
- d
e t h e i d e a i s :
n
- d
e . n e x t . p r e v = n
- d
e . p r e v ; n
- d
e . p r e v . n e x t = n
- d
e . n e x t ;
B u t t h i s C R A S H E S i f w e t r y t
- d
e l e t e t h e fj r s t n
- d
e , s i n c e t h e n n
- d
e . p r e v = = n u l l ! A l s
- ,
i f w e d e l e t e t h e fj r s t n
- d
e , w e n e e d t
- u
p d a t e t h e l i s t
- b
j e c t ' s h e a d . L
- t
s a n d l
- t
s
- f
s p e c i a l c a s e s f
- r
a l l
- p
e r a t i
- n
s :
- Wh
a t i f t h e n
- d
e i s t h e fj r s t n
- d
e ?
- Wh
a t i f t h e n
- d
e i s t h e l a s t n
- d
e ?
- Wh
a t i f t h e l i s t
- n
l y h a s
- n
e e l e m e n t s
- t
h e n
- d
e i s b
- t
h t h e fj r s t a n d t h e l a s t n
- d
e ?
G e t t i n g r i d
- f
t h e s p e c i a l c a s e s
H
- w
c a n w e g e t r i d
- f
t h e s e s p e c i a l c a s e s ? O n e i d e a ( s e e b
- k
) : u s e a h e a d e r n
- d
e l i k e f
- r
s i n g l y
- l
i n k e d l i s t s , b u t a l s
- a
f
- t
e r n
- d
e .
- h
e a d a n d t a i l w i l l p
- i
n t a t t h e h e a d e r a n d f
- t
e r n
- d
e
- N
- d
a t a n
- d
e w i l l h a v e n u l l a s i t s n e x t
- r
p r e v
- A
l l s p e c i a l c a s e s g
- n
e !
- S
m a l l p r
- b
l e m : a l l
- c
a t e s t w
- e
x t r a n
- d
e s p e r l i s t
A c u t e s
- l
u t i
- n
: c i r c u l a r l y
- l
i n k e d l i s t w i t h h e a d e r n
- d
e
C i r c u l a r l y
- l
i n k e d l i s t w i t h h e a d e r n
- d
e
h e a d = L i n k e d L i s t < S t r i n g > n e x t = p r e v = d a t a = " T
- m
" N
- d
e < S t r i n g > n e x t = p r e v = d a t a = " D i c k " N
- d
e < S t r i n g > n e x t = p r e v = d a t a = N
- d
e < S t r i n g > n e x t = p r e v = d a t a = " H a r r y " N
- d
e < S t r i n g >
H e r e i s t h e h e a d e r n
- d
e ( “ p r e v ” l i n k s n
- t
s h
- w
n )
C i r c u l a r l y
- l
i n k e d l i s t w i t h h e a d e r n
- d
e
W
- r
k s
- u
t q u i t e n i c e l y !
- h
e a d . n e x t i s t h e fj r s t e l e m e n t i n t h e l i s t
- h
e a d . p r e v i s t h e l a s t e l e m e n t
- y
- u
n e v e r n e e d t
- u
p d a t e h e a d
- n
- n
- d
e ' s n e x t
- r
p r e v i s e v e r n u l l
- s
- n
- s
p e c i a l c a s e s !
Y
- u
c a n e v e n m a k e d
- w
i t h
- u
t t h e h e a d e r n
- d
e – t h e n y
- u
h a v e
- n
e s p e c i a l c a s e , w h e n y
- u
n e e d t
- u
p d a t e h e a d
S t a c k s a n d l i s t s u s i n g l i n k e d l i s t s
Y
- u
c a n i m p l e m e n t a s t a c k u s i n g a l i n k e d l i s t :
- p
u s h : a d d t
- f
r
- n
t
- f
l i s t
- p
- p
: r e m
- v
e f r
- m
f r
- n
t
- f
l i s t
Y
- u
c a n a l s
- i
m p l e m e n t a q u e u e :
- e
n q u e u e : a d d t
- r
e a r
- f
l i s t
- d
e q u e u e : r e m
- v
e f r
- m
f r
- n
t
- f
l i s t
A q u e u e a s a s i n g l y
- l
i n k e d l i s t
W e c a n i m p l e m e n t a q u e u e a s a s i n g l y
- l
i n k e d l i s t w i t h a n e x t r a r e a r p
- i
n t e r : W e e n q u e u e e l e m e n t s b y a d d i n g t h e m t
- t
h e b a c k
- f
t h e l i s t :
- S
e t r e a r . n e x t t
- t
h e n e w n
- d
e
- U
p d a t e r e a r s
- i
t p
- i
n t s t
- t
h e n e w n
- d
e
L i n k e d l i s t s v s d y n a m i c a r r a y s
D y n a m i c a r r a y s :
- h
a v e O ( 1 ) r a n d
- m
a c c e s s ( g e t a n d s e t )
- h
a v e a m
- r
t i s e d O ( 1 ) i n s e r t i
- n
a t e n d
- h
a v e O ( n ) i n s e r t i
- n
a n d d e l e t i
- n
i n m i d d l e
L i n k e d l i s t s :
- h
a v e O ( n ) r a n d
- m
a c c e s s
- h
a v e O ( 1 ) s e q u e n t i a l a c c e s s
- h
a v e O ( 1 ) i n s e r t i
- n
i n a n a r b i t r a r y p l a c e ( b u t y
- u
h a v e t
- fj
n d t h a t p l a c e fj r s t )
C
- m
p l e m e n t e a c h
- t
h e r !
W h a t ' s t h e p r
- b
l e m w i t h t h i s ?
i n t s u m ( L i n k e d L i s t < I n t e g e r > l i s t ) { i n t t
- t
a l = ; f
- r
( i n t i = ; i < l i s t . s i z e ( ) ; i + + ) t
- t
a l + = l i s t . g e t ( i ) ; r e t u r n t
- t
a l ; }
l i s t . g e t i s O ( n ) – s
- t
h e w h
- l
e t h i n g i s O ( n
2
) !
B e t t e r !
i n t s u m ( L i n k e d L i s t < I n t e g e r > l i s t ) { i n t t
- t
a l = ; f
- r
( i n t i : l i s t ) t
- t
a l + = i ; r e t u r n t
- t
a l ; }
R e m e m b e r – l i n k e d l i s t s a r e f
- r
s e q u e n t i a l a c c e s s
- n
l y
L i n k e d l i s t s – s u m m a r y
P r
- v
i d e s e q u e n t i a l a c c e s s t
- a
l i s t
- S
i n g l y
- l
i n k e d – c a n
- n
l y g
- f
- r
w a r d s
- D
- u
b l y
- l
i n k e d – c a n g
- f
- r
w a r d s
- r
b a c k w a r d s
Ma n y v a r i a t i
- n
s – h e a d e r n
- d
e s , c i r c u l a r l i s t s – b u t t h e y a l l i m p l e m e n t t h e s a m e a b s t r a c t d a t a t y p e ( i n t e r f a c e ) C a n i n s e r t
- r
d e l e t e
- r
m
- d
i f y a n
- d
e i n O ( 1 ) t i m e B u t u n l i k e a r r a y s , r a n d
- m
a c c e s s i s O ( n ) J a v a : L i n k e d L i s t < E > c l a s s
H a s h t a b l e s ( 1 9 . 1 – 1 9 . 3 , 1 9 . 5 – 1 9 . 6 )
H a s h t a b l e s n a ï v e l y
A h a s h t a b l e i m p l e m e n t s a s e t
- r
m a p Tie p l a n : t a k e a n a r r a y
- f
s i z e k D e fj n e a h a s h f u n c t i
- n
t h a t m a p s v a l u e s t
- i
n d i c e s i n t h e r a n g e { , . . . , k
- 1
}
- E
x a m p l e : i f t h e v a l u e s a r e i n t e g e r s , h a s h f u n c t i
- n
m i g h t b e h ( n ) = n m
- d
k
T
- fj
n d , i n s e r t
- r
r e m
- v
e a v a l u e x , p u t i t i n i n d e x h ( x )
- f
t h e a r r a y
H a s h t a b l e s n a ï v e l y , e x a m p l e
I m p l e m e n t i n g a s e t
- f
i n t e g e r s , s u p p
- s
e w e t a k e a h a s h t a b l e
- f
s i z e 5 a n d a h a s h f u n c t i
- n
h ( n ) = n m
- d
5 I n s e r t i n g 1 4 g i v e s : 5 1 78
01234 Tii
s h a s h t a b l e c
- n
t a i n s { 5 , 8 , 1 7 }
1 4 5 1 78
01234
S i m i l a r l y , i f w e w a n t e d t
- fj
n d 8 , w e w
- u
l d l
- k
i t u p i n i n d e x 3
A p r
- b
l e m
Tii s n a ï v e i d e a d
- e
s n ' t w
- r
k . Wh a t i f w e w a n t t
- i
n s e r t 1 2 i n t
- t
h e s e t ? W e s h
- u
l d s t
- r
e 1 2 a t i n d e x 2 , b u t t h e r e ' s a l r e a d y s
- m
e t h i n g t h e r e ! Tii s i s c a l l e d a c
- l
l i s i
- n
5 1 78
01234
T h e p r
- b
l e m w i t h n a ï v e h a s h t a b l e s
N a ï v e h a s h t a b l e s h a v e t w
- p
r
- b
l e m s : 1 . S
- m
e t i m e s t w
- v
a l u e s h a v e t h e s a m e h a s h – t h i s i s c a l l e d a c
- l
l i s i
- n
- T
w
- w
a y s
- f
a v
- i
d i n g c
- l
l i s i
- n
s , c h a i n i n g a n d p r
- b
i n g – w e w i l l s e e t h e m l a t e r
2 . Tie h a s h f u n c t i
- n
i s s p e c i fj c t
- a
p a r t i c u l a r s i z e
- f
a r r a y
- A
l l
- w
t h e h a s h f u n c t i
- n
t
- r
e t u r n a n a r b i t r a r y i n t e g e r a n d t h e n t a k e i t m
- d
u l
- t
h e a r r a y s i z e : h ( x ) = x . h a s h C
- d
e ( ) m
- d
a r r a y . s i z e
A v
- i
d i n g c
- l
l i s i
- n
s : c h a i n i n g
I n s t e a d
- f
a n a r r a y
- f
e l e m e n t s , h a v e a n a r r a y
- f
l i n k e d l i s t s T
- a
d d a n e l e m e n t , c a l c u l a t e i t s h a s h a n d i n s e r t i t i n t
- t
h e l i s t a t t h a t i n d e x
01234
5 1 78
A v
- i
d i n g c
- l
l i s i
- n
s : c h a i n i n g
I n s t e a d
- f
a n a r r a y
- f
e l e m e n t s , h a v e a n a r r a y
- f
l i n k e d l i s t s T
- a
d d a n e l e m e n t , c a l c u l a t e i t s h a s h a n d i n s e r t i t i n t
- t
h e l i s t a t t h a t i n d e x I n s e r t i n g 1 2 i n t
- t
h e t a b l e
01234
5 1 78 1 2
P e r f
- r
m a n c e
- f
c h a i n e d h a s h t a b l e s
I f t h e l i n k e d l i s t s a r e s m a l l , c h a i n e d h a s h t a b l e s a r e f a s t
- I
f t h e s i z e i s b
- u
n d e d ,
- p
e r a t i
- n
s a r e O ( 1 ) t i m e
B u t i f t h e y g e t b i g , e v e r y t h i n g g e t s s l
- w
O b s e r v a t i
- n
1 : t h e a r r a y m u s t b e b i g e n
- u
g h
- I
f t h e h a s h t a b l e g e t s t
- f
u l l ( a h i g h l
- a
d f a c t
- r
) , a l l
- c
a t e a n e w a r r a y
- f
a b
- u
t t w i c e t h e s i z e ( r e h a s h i n g )
O b s e r v a t i
- n
2 : t h e h a s h f u n c t i
- n
m u s t e v e n l y d i s t r i b u t e t h e e l e m e n t s !
- I
f e v e r y t h i n g h a s t h e s a m e h a s h c
- d
e , a l l
- p
e r a t i
- n
s a r e O ( n )
D e fj n i n g a g
- d
h a s h f u n c t i
- n
Wh a t i s w r
- n
g w i t h t h e f
- l
l
- w
i n g h a s h f u n c t i
- n
- n
s t r i n g s ?
A d d t
- g
e t h e r t h e c h a r a c t e r c
- d
e
- f
e a c h c h a r a c t e r i n t h e s t r i n g ( c h a r a c t e r c
- d
e
- f
a = 9 7 , b = 9 8 , c = 9 9 e t c . )
Ma p s e . g . b a s s a n d b a r t t
- t
h e s a m e h a s h c
- d
e ! ( s + s = r + t ) S i m i l a r s t r i n g s w i l l b e m a p p e d t
- n
e a r b y h a s h c
- d
e s – d
- e
s n
- t
d i s t r i b u t e s t r i n g s e v e n l y
A h a s h f u n c t i
- n
- n
s t r i n g s
A n i d e a : m a p s t r i n g s t
- i
n t e g e r s a s f
- l
l
- w
s :
s · 1 2 8
n
- 1
+ s
1
· 1 2 8
n
- 2
+ … + s
n
- 1
w h e r e s
i
i s t h e c
- d
e
- f
t h e c h a r a c t e r a t i n d e x i I f a l l c h a r a c t e r s a r e A S C I I ( c h a r a c t e r c
- d
e – 1 2 7 ) , e a c h s t r i n g i s m a p p e d t
- a
d i fg e r e n t i n t e g e r !
T h e p r
- b
l e m
I n m a n y l a n g u a g e s , w h e n c a l c u l a t i n g s · 1 2 8
n
- 1
+ s
1
· 1 2 8
n
- 2
+ … + s
n
- 1
, t h e c a l c u l a t i
- n
h a p p e n s m
- d
u l
- 2
3 2
( i n t e g e r
- v
e r fm
- w
) S
- t
h e h a s h w i l l
- n
l y u s e t h e l a s t f e w c h a r a c t e r s ! S
- l
u t i
- n
: r e p l a c e 1 2 8 w i t h 3 7 s · 3 7
n
- 1
+ s
1
· 3 7
n
- 2
+ … + s
n
- 1
U s e a p r i m e n u m b e r t
- g
e t a g
- d
d i s t r i b u t i
- n
Tii s i s w h a t J a v a u s e s f
- r
s t r i n g s
H a s h i n g a p a i r
c l a s s C { A a ; B b ; } O n e w a y : m u l t i p l y t h e t w
- h
a s h c
- d
e s b y d i fg e r e n t p r i m e n u m b e r s a n d a d d t h e r e s u l t s , t h e n a d d a c
- n
s t a n t : i n t h a s h C
- d
e ( ) { r e t u r n 3 1 * a . h a s h C
- d
e ( ) + 3 7 * b . h a s h C
- d
e ( ) + 1 ; }
H a s h f u n c t i
- n
s
A g
- d
h a s h f u n c t i
- n
m u s t d i s t r i b u t e e l e m e n t s e v e n l y t
- a
v
- i
d c
- l
l i s i
- n
s D e fj n i n g r e a l l y g
- d
h a s h f u n c t i
- n
s i s a b l a c k a r t – b u t t h e t w
- t
e c h n i q u e s a b
- v
e g i v e y
- u
d e c e n t h a s h f u n c t i
- n
s L a s t t r i c k : m a k e t h e h a s h t a b l e s i z e a p r i m e n u m b e r – t h i s h e l p s m a s k p a t t e r n s i n t h e h a s h f u n c t i
- n
- e
. g . , i f t h e h a s h f u n c t i
- n
a l w a y s r e t u r n s a n e v e n n u m b e r , i f t h e a r r a y s i z e i s a p
- w
e r
- f
t w
- t
h e n a l l t h e
- d
d i n d e x e s w i l l b e e m p t y
L i n e a r p r
- b
i n g
A n
- t
h e r w a y
- f
d e a l i n g w i t h c
- l
l i s i
- n
s i s l i n e a r p r
- b
i n g U s e s a n a r r a y
- f
v a l u e s , l i k e i n t h e n a ï v e h a s h t a b l e I f y
- u
w a n t t
- s
t
- r
e a v a l u e a t i n d e x i b u t i t ' s f u l l , s t
- r
e i t i n i n d e x i + 1 i n s t e a d ! I f t h a t ' s f u l l , t r y i + 2 , a n d s
- n
. . . i f y
- u
g e t t
- t
h e e n d
- f
t h e a r r a y , w r a p a r
- u
n d t
41
E x e m p e l : I n s ä t t n i n g
Name hashCod e()
hashCode() %5 "Tom"
84274 4
"Dick"
2129869 4
"Harry" 69496448
3
"Sam"
82879 4
"Pete"
2484038 3
[0] [1] [2] [3] [4] Tom Dick Harry Sam Pete
42
E x e m p e l : I n s ä t t n i n g
Name hashCod e()
hashCode() %5 "Tom"
84274 4
"Dick"
2129869 4
"Harry" 69496448
3
"Sam"
82879 4
"Pete"
2484038 3
[0] [1] [2] [3] [4] Dick Harry Sam Pete Tom
43
E x e m p e l : I n s ä t t n i n g
Name hashCod e()
hashCode() %5 "Tom"
84274 4
"Dick"
2129869 4
"Harry" 69496448
3
"Sam"
82879 4
"Pete"
2484038 3
[0] [1] [2] [3] [4] Dick Harry Sam Pete Tom
44
E x e m p e l : I n s ä t t n i n g
Name hashCod e()
hashCode() %5 "Tom"
84274 4
"Dick"
2129869 4
"Harry" 69496448
3
"Sam"
82879 4
"Pete"
2484038 3
[0] [1] [2] [3] [4] Harry Sam Pete Tom Dick
45
E x e m p e l : I n s ä t t n i n g
Name hashCod e()
hashCode() %5 "Tom"
84274 4
"Dick"
2129869 4
"Harry" 69496448
3
"Sam"
82879 4
"Pete"
2484038 3
[0] [1] [2] [3] [4] Harry Sam Pete Tom Dick
46
E x e m p e l : I n s ä t t n i n g
Name hashCod e()
hashCode() %5 "Tom"
84274 4
"Dick"
2129869 4
"Harry" 69496448
3
"Sam"
82879 4
"Pete"
2484038 3
[0] [1] [2] [3] [4] Harry Sam Pete Tom Dick
47
E x e m p e l : I n s ä t t n i n g
Name hashCod e()
hashCode() %5 "Tom"
84274 4
"Dick"
2129869 4
"Harry" 69496448
3
"Sam"
82879 4
"Pete"
2484038 3
[0] [1] [2] [3] [4] Harry Pete Tom Dick Sam
48
E x e m p e l : I n s ä t t n i n g
Name hashCod e()
hashCode() %5 "Tom"
84274 4
"Dick"
2129869 4
"Harry" 69496448
3
"Sam"
82879 4
"Pete"
2484038 3
[0] [1] [2] [3] [4] Harry Sam Pete Tom Dick
49
E x e m p e l : I n s ä t t n i n g
Name hashCod e()
hashCode() %5 "Tom"
84274 4
"Dick"
2129869 4
"Harry" 69496448
3
"Sam"
82879 4
"Pete"
2484038 3
[0] [1] [2] [3] [4] Harry Sam Tom Dick Pete
50
E x e m p e l : I n s ä t t n i n g
Name hashCod e()
hashCode() %5 "Tom"
84274 4
"Dick"
2129869 4
"Harry" 69496448
3
"Sam"
82879 4
"Pete"
2484038 3
[0] [1] [2] [3] [4] Harry Sam Tom Dick Pete
51
E x e m p e l : I n s ä t t n i n g
Name hashCod e()
hashCode() %5 "Tom"
84274 4
"Dick"
2129869 4
"Harry" 69496448
3
"Sam"
82879 4
"Pete"
2484038 3
[0] [1] [2] [3] [4] Harry Sam Tom Dick Pete
52
E x e m p e l : I n s ä t t n i n g
Name hashCod e()
hashCode() %5 "Tom"
84274 4
"Dick"
2129869 4
"Harry" 69496448
3
"Sam"
82879 4
"Pete"
2484038 3
[0] [1] [2] [3] [4] Harry Sam Tom Dick Pete
53
E x e m p e l : I n s ä t t n i n g
Name hashCod e()
hashCode() %5 "Tom"
84274 4
"Dick"
2129869 4
"Harry" 69496448
3
"Sam"
82879 4
"Pete"
2484038 3
[0] [1] [2] [3] [4] Harry Sam Tom Dick Pete
T
- fj
n d “ P e t e ” ( h a s h 3 ) , y
- u
m u s t s t a r t a t i n d e x 3 a n d w
- r
k y
- u
r w a y a l l t h e w a y a r
- u
n d t
- i
n d e x 2
S e a r c h i n g w i t h l i n e a r p r
- b
i n g
T
- fj
n d a n e l e m e n t u n d e r l i n e a r p r
- b
i n g :
- C
a l c u l a t e t h e h a s h
- f
t h e e l e m e n t , i
- L
- k
a t a r r a y [ i ]
- I
f i t ' s t h e r i g h t e l e m e n t , r e t u r n i t !
- I
f t h e r e ' s n
- e
l e m e n t t h e r e , f a i l
- I
f t h e r e ' s a d i fg e r e n t e l e m e n t t h e r e , s e a r c h a g a i n a t i n d e x ( i + 1 ) % a r r a y . s i z e
W e c a l l a g r
- u
p
- f
a d j a c e n t n
- n
- e
m p t y i n d i c e s a c l u s t e r
D e l e t i n g w i t h l i n e a r p r
- b
i n g
C a n ' t j u s t r e m
- v
e t h e e l e m e n t . . .
Name hashCod e()
hashCode() %5 "Tom"
84274 4
"Dick"
2129869 4
"Harry" 69496448
3
"Sam"
82879 4
"Pete"
2484038 3
[0] [1] [2] [3] [4] Harry Sam Tom Dick Pete
I f w e r e m
- v
e H a r r y , P e t e w i l l b e i n t h e w r
- n
g c l u s t e r a n d w e w
- n
' t b e a b l e t
- fj
n d h i m
D e l e t i n g w i t h l i n e a r p r
- b
i n g
I n s t e a d , m a r k i t a s d e l e t e d ( l a z y d e l e t i
- n
)
Name hashCod e()
hashCode() %5 "Tom"
84274 4
"Dick"
2129869 4
"Harry" 69496448
3
"Sam"
82879 4
"Pete"
2484038 3
[0] [1] [2] [3] [4] XXXXXX Sam Tom Dick Pete
Tie s e a r c h a l g
- r
i t h m w i l l s k i p
- v
e r X X X X X X
D e l e t i n g w i t h l i n e a r p r
- b
i n g
I t ' s u s e f u l t
- t
h i n k
- f
t h e i n v a r i a n t h e r e :
- L
i n e a r c h a i n i n g : e a c h e l e m e n t i s f
- u
n d a t t h e i n d e x g i v e n b y i t s h a s h c
- d
e
- L
i n e a r p r
- b
i n g : e a c h e l e m e n t i s f
- u
n d a t t h e i n d e x g i v e n b y i t s h a s h c
- d
e ,
- r
a l a t e r i n d e x i n t h e s a m e c l u s t e r
N a ï v e d e l e t i
- n
w i l l s p l i t a c l u s t e r i n t w
- ,
w h i c h m a y b r e a k t h e i n v a r i a n t H e n c e t h e n e e d f
- r
a n e m p t y v a l u e t h a t d
- e
s n
- t
m a r k t h e e n d
- f
a c l u s t e r
L i n e a r p r
- b
i n g p e r f
- r
m a n c e
T
- i
n s e r t
- r
fj n d a n e l e m e n t u n d e r l i n e a r p r
- b
i n g , y
- u
m i g h t h a v e t
- l
- k
t h r
- u
g h a w h
- l
e c l u s t e r
- f
e l e m e n t s P e r f
- r
m a n c e d e p e n d s
- n
t h e s i z e
- f
t h e s e c l u s t e r s :
- S
m a l l c l u s t e r s – e x p e c t e d O ( 1 ) p e r f
- r
m a n c e
- A
l m
- s
t
- f
u l l a r r a y – O ( n ) p e r f
- r
m a n c e
- I
f t h e a r r a y i s f u l l , y
- u
c a n ' t i n s e r t a n y t h i n g !
Tiu s y
- u
n e e d :
- t
- e
x p a n d t h e a r r a y a n d r e h a s h w h e n i t s t a r t s g e t t i n g f u l l
- a
h a s h f u n c t i
- n
t h a t d i s t r i b u t e s e l e m e n t s e v e n l y
S a m e s i t u a t i
- n
a s w i t h l i n e a r c h a i n i n g !
L i n e a r p r
- b
i n g v s l i n e a r c h a i n i n g
I n l i n e a r c h a i n i n g , i f y
- u
i n s e r t s e v e r a l e l e m e n t s w i t h t h e s a m e h a s h i , t h
- s
e e l e m e n t s b e c
- m
e s l
- w
e r t
- fj
n d I n l i n e a r p r
- b
i n g , e l e m e n t s w i t h h a s h i + 1 , i + 2 , e t c . , w i l l b e l
- n
g t
- t
h e s a m e c l u s t e r a s e l e m e n t i , a n d w i l l a l s
- g
e t s l
- w
e r t
- fj
n d I f t h e l
- a
d f a c t
- r
i s t
- h
i g h , t h i s t e n d s t
- r
e s u l t i n v e r y l
- n
g c l u s t e r s i n t h e h a s h t a b l e – a p h e n
- m
e n
- n
c a l l e d p r i m a r y c l u s t e r i n g
L i n e a r p r
- b
i n g i s m
- r
e s e n s i t i v e t
- h
i g h l
- a
d O n t h e
- t
h e r h a n d , l i n e a r p r
- b
i n g u s e s l e s s m e m
- r
y f
- r
a g i v e n l
- a
d f a c t
- r
, s
- y
- u
c a n u s e a b i g g e r a r r a y t h a n y
- u
w
- u
l d w i t h c h a i n i n g
P r
- b
i n g v s c h a i n i n g
l
- a
d f a c t
- r
( # e l e me n t s / a r r a y s i z e ) # c
- mp
a r i s
- n
s ( l i n e a r p r
- b
i n g ) # c
- mp
a r i s
- n
s ( l i n e a r c h a i n i n g ) % 1 . 1 . 2 5 % 1 . 1 7 1 . 1 3 5 % 1 . 5 1 . 2 5 7 5 % 2 . 5 1 . 3 8 8 5 % 3 . 8 3 1 . 4 3 9 % 5 . 5 1 . 4 5 9 5 % 1 . 5 1 . 4 8 1 %
—
1 . 5 2 %
—
2 . 3 %
— 2.50
S u m m a r y
- f
h a s h t a b l e d e s i g n
S e v e r a l d e t a i l s t
- c
- n
s i d e r :
- R
e h a s h i n g : r e s i z e t h e a r r a y w h e n t h e l
- a
d f a c t
- r
i s t
- h
i g h
- A
g
- d
h a s h f u n c t i
- n
: n e e d a n e v e n d i s t r i b u t i
- n
- C
- l
l i s i
- n
s : e i t h e r c h a i n i n g
- r
p r
- b
i n g
H a s h t a b l e s h a v e e x p e c t e d ( a v e r a g e ) O ( 1 ) p e r f
- r
m a n c e i f t h e h a s h f u n c t i
- n
i s r a n d
- m
( t h e r e a r e n
- p
a t t e r n s ) – b u t i t ' s n
- r
m a l l y n
- t
! N e v e r t h e l e s s , p e r f
- r
m a n c e i s O ( 1 ) i n p r a c t i c e w i t h d e c e n t h a s h f u n c t i
- n
s . S
- –
t h e
- r
e t i c a l f
- u
n d a t i
- n
s a l i t t l e s h a k y , b u t v e r y g
- d
p r a c t i c a l p e r f
- r
m a n c e .
H a s h t a b l e s v e r s u s B S T s
H a s h t a b l e s : O ( 1 ) p e r f
- r
m a n c e i n p r a c t i c e ( O ( n ) i f v e r y u n l u c k y ) , B S T s : O ( l
- g
n ) i f b a l a n c e d H a s h t a b l e s a r e u n
- r
d e r e d : y
- u
c a n ' t e . g . g e t t h e e l e m e n t s i n i n c r e a s i n g
- r
d e r B u t t h e y a r e n
- r
m a l l y f a s t e r t h a n b a l a n c e d B S T s , d e s p i t e t h e t h e
- r
e t i c a l O ( n ) w
- r