More Related Content Similar to 18 Hash tables and sets
Similar to 18 Hash tables and sets (20) 18 Hash tables and sets1. HHaasshh TTaabblleess aanndd SSeettss
DDiiccttiioonnaarriieess,, HHaasshh TTaabblleess,, CCoolllliissiioonnss RReessoolluuttiioonn,, SSeettss
SSvveettlliinn NNaakkoovv
TTeelleerriikk CCoorrppoorraattiioonn
wwwwww..tteelleerriikk..ccoomm
2. TTaabbllee ooff CCoonntteennttss
11.. DDiiccttiioonnaarriieess
22.. HHaasshh TTaabblleess
33.. DDiiccttiioonnaarryy<<TTKKeeyy,, TTVVaalluuee>> CCllaassss
44.. SSeettss
2
4. TThhee DDiiccttiioonnaarryy ((MMaapp)) AADDTT
TThhee aabbssttrraacctt ddaattaa ttyyppee ((AADDTT)) ""ddiiccttiioonnaarryy"" mmaappss
kkeeyy ttoo vvaalluueess
AAllssoo kknnoowwnn aass ""mmaapp"" oorr ""aassssoocciiaattiivvee aarrrraayy""
CCoonnttaaiinnss aa sseett ooff ((kkeeyy,, vvaalluuee)) ppaaiirrss
DDiiccttiioonnaarryy AADDTT ooppeerraattiioonnss::
AAdddd((kkeeyy,, vvaalluuee))
FFiinnddBByyKKeeyy((kkeeyy)) vvaalluuee
DDeelleettee((kkeeyy))
CCaann bbee iimmpplleemmeenntteedd iinn sseevveerraall wwaayyss
LLiisstt,, aarrrraayy,, hhaasshh ttaabbllee,, bbaallaanncceedd ttrreeee,, ......
4
5. AADDTT DDiiccttiioonnaarryy –– EExxaammppllee
EExxaammppllee ddiiccttiioonnaarryy::
5
KKeeyy VVaalluuee
CC## Modern object-oriented programming
llaanngguuaaggee ffoorr tthhee MMiiccrroossoofftt ..NNEETT ppllaattffoorrmm
CCLLRR
CCoommmmoonn LLaanngguuaaggee RRuunnttiimmee –– eexxeeccuuttiioonn
eennggiinnee ffoorr ..NNEETT aasssseemmbblliieess,, iinntteeggrraall ppaarrtt
ooff ..NNEETT FFrraammeewwoorrkk
ccoommppiilleerr Software that transforms a computer
pprrooggrraamm ttoo eexxeeccuuttaabbllee mmaacchhiinnee ccooddee
…… ……
7. HHaasshh TTaabbllee
AA hhaasshh ttaabbllee iiss aann aarrrraayy tthhaatt hhoollddss aa sseett ooff
((kkeeyy,, vvaalluuee)) ppaaiirrss
TThhee pprroocceessss ooff mmaappppiinngg aa kkeeyy ttoo aa ppoossiittiioonn iinn aa
ttaabbllee iiss ccaalllleedd hhaasshhiinngg
0 1 2 3 4 5 … m-1
…… …… …… …… …… …… …… ……
T
hh((kk)) HHaasshh ttaabbllee
ooff ssiizzee mm
HHaasshh ffuunnccttiioonn
hh:: kk →→ 00 …… mm--11
7
8. Hash FFuunnccttiioonnss aanndd HHaasshhiinngg
AA hhaasshh ttaabbllee hhaass mm sslloottss,, iinnddeexxeedd ffrroomm 00 ttoo mm--11
AA hhaasshh ffuunnccttiioonn hh((kk)) mmaappss kkeeyyss ttoo ppoossiittiioonnss::
hh:: kk →→ 00 …… mm--11
FFoorr aannyy vvaalluuee kk iinn tthhee kkeeyy rraannggee aanndd ssoommee hhaasshh
ffuunnccttiioonn hh wwee hhaavvee hh((kk)) == pp aanndd 00 ≤≤ pp << mm
0 1 2 3 4 5 … m-1
…… …… …… …… …… …… …… ……
T
hh((kk))
8
9. HHaasshhiinngg FFuunnccttiioonnss
PPeerrffeecctt hhaasshhiinngg ffuunnccttiioonn ((PPHHFF))
hh((kk)) :: oonnee--ttoo--oonnee mmaappppiinngg ooff eeaacchh kkeeyy kk ttoo aann
iinntteeggeerr iinn tthhee rraannggee [[00,, mm--11]]
TThhee PPHHFF mmaappss eeaacchh kkeeyy ttoo aa ddiissttiinncctt iinntteeggeerr
wwiitthhiinn ssoommee mmaannaaggeeaabbllee rraannggee
FFiinnddiinngg aa ppeerrffeecctt hhaasshhiinngg ffuunnccttiioonn iiss iinn mmoosstt
ccaasseess iimmppoossssiibbllee
MMoorree rreeaalliissttiiccaallllyy
HHaasshh ffuunnccttiioonn hh((kk)) tthhaatt mmaappss mmoosstt ooff tthhee kkeeyyss
oonnttoo uunniiqquuee iinntteeggeerrss,, bbuutt nnoott aallll
9
10. CCoolllliissiioonnss iinn aa HHaasshh TTaabbllee
AA ccoolllliissiioonn iiss tthhee ssiittuuaattiioonn wwhheenn ddiiffffeerreenntt kkeeyyss
hhaavvee tthhee ssaammee hhaasshh vvaalluuee
hh((kk11)) == hh((kk22)) ffoorr kk11 ≠≠ kk22
WWhheenn tthhee nnuummbbeerr ooff ccoolllliissiioonnss iiss ssuuffffiicciieennttllyy
ssmmaallll,, tthhee hhaasshh ttaabblleess wwoorrkk qquuiittee wweellll ((ffaasstt))
SSeevveerraall ccoolllliissiioonnss rreessoolluuttiioonn ssttrraatteeggiieess eexxiisstt
CChhaaiinniinngg iinn aa lliisstt
UUssiinngg tthhee nneeiigghhbboorriinngg sslloottss ((lliinneeaarr pprroobbiinngg))
RRee--hhaasshhiinngg
......
10
11. CCoolllliissiioonn RReessoolluuttiioonn:: CChhaaiinniinngg
hh((""PPeesshhoo"")) == 44
hh((""KKiirroo"")) == 22
hh((""MMiimmii"")) == 11
hh((""IIvvaann"")) == 22
hh((""LLiillii"")) == mm--11
0 1 2 3 4 … m-1
Kiro
Ivan
null
Mimi
null
Lili
null
Pesho
null
ccoolllliissiioonn
CChhaaiinniinngg
eelleemmeennttss iinn
ccaassee ooff ccoolllliissiioonn
nnuullll …… …… nnuullll …… …… ……
T
11
12. HHaasshh TTaabblleess aanndd EEffffiicciieennccyy
HHaasshh ttaabblleess aarree tthhee mmoosstt eeffffiicciieenntt
iimmpplleemmeennttaattiioonn ooff AADDTT ""ddiiccttiioonnaarryy""
AAdddd // FFiinndd // DDeelleettee ttaakkee jjuusstt ffeeww pprriimmiittiivvee
ooppeerraattiioonnss
SSppeeeedd ddooeess nnoott ddeeppeenndd oonn tthhee ssiizzee ooff tthhee hhaasshh--
ttaabbllee ((ccoonnssttaanntt ttiimmee))
EExxaammppllee:: ffiinnddiinngg aann eelleemmeenntt iinn aa hhaasshh--ttaabbllee
wwiitthh 11 000000 000000 eelleemmeennttss,, ttaakkeess jjuusstt ffeeww sstteeppss
FFiinnddiinngg aann eelleemmeenntt iinn aarrrraayy ooff 11 000000 000000 eelleemmeennttss
ttaakkeess aavveerraaggee 50000 000000 sstteeppss
12
15. DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>>
IImmpplleemmeennttss tthhee AADDTT ddiiccttiioonnaarryy aass hhaasshh ttaabbllee
SSiizzee iiss ddyynnaammiiccaallllyy iinnccrreeaasseedd aass nneeeeddeedd
CCoonnttaaiinnss aa ccoolllleeccttiioonn ooff kkeeyy--vvaalluuee ppaaiirrss
CCoolllliissiioonnss aarree rreessoollvveedd bbyy cchhaaiinniinngg
EElleemmeennttss hhaavvee aallmmoosstt rraannddoomm oorrddeerr
OOrrddeerreedd bbyy tthhee hhaasshh ccooddee ooff tthhee kkeeyy
DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> rreelliieess oonn
OObbjjeecctt..EEqquuaallss(()) –– ffoorr ccoommppaarriinngg tthhee kkeeyyss
OObbjjeecctt..GGeettHHaasshhCCooddee(()) –– ffoorr ccaallccuullaattiinngg tthhee
hhaasshh ccooddeess ooff tthhee kkeeyyss
15
16. DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> ((22))
MMaajjoorr ooppeerraattiioonnss::
AAdddd((TTKKeeyy,,TTVVaalluuee)) –– aaddddss aann eelleemmeenntt wwiitthh
tthhee ssppeecciiffiieedd kkeeyy aanndd vvaalluuee
RReemmoovvee((TTKKeeyy)) –– rreemmoovveess tthhee eelleemmeenntt bbyy kkeeyy
tthhiiss[[]] –– ggeett//aadddd//rreeppllaaccee ooff eelleemmeenntt bbyy kkeeyy
CClleeaarr(()) –– rreemmoovveess aallll eelleemmeennttss
CCoouunntt –– rreettuurrnnss tthhee nnuummbbeerr ooff eelleemmeennttss
KKeeyyss –– rreettuurrnnss aa ccoolllleeccttiioonn ooff tthhee kkeeyyss
VVaalluueess –– rreettuurrnnss aa ccoolllleeccttiioonn ooff tthhee vvaalluueess
16
17. DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> ((33))
MMaajjoorr ooppeerraattiioonnss::
CCoonnttaaiinnssKKeeyy((TTKKeeyy)) –– cchheecckkss wwhheetthheerr tthhee
ddiiccttiioonnaarryy ccoonnttaaiinnss ggiivveenn kkeeyy
CCoonnttaaiinnssVVaalluuee((TTVVaalluuee)) –– cchheecckkss wwhheetthheerr
tthhee ddiiccttiioonnaarryy ccoonnttaaiinnss ggiivveenn vvaalluuee
WWaarrnniinngg:: ssllooww ooppeerraattiioonn!!
TTrryyGGeettVVaalluuee((TTKKeeyy,, oouutt TTVVaalluuee))
IIff tthhee kkeeyy iiss ffoouunndd,, rreettuurrnnss iitt iinn tthhee TTVVaalluuee
OOtthheerrwwiissee rreettuurrnnss ffaallssee
17
18. DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> ––
EExxaammppllee
DDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>> ssttuuddeennttssMMaarrkkss ==
nneeww DDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>>(());;
ssttuuddeennttssMMaarrkkss..AAdddd((""IIvvaann"",, 44));;
ssttuuddeennttssMMaarrkkss..AAdddd((""PPeetteerr"",, 66));;
ssttuuddeennttssMMaarrkkss..AAdddd((""MMaarriiaa"",, 66));;
ssttuuddeennttssMMaarrkkss..AAdddd((""GGeeoorrggee"",, 55));;
iinntt ppeetteerrMMaarrkk == ssttuuddeennttssMMaarrkkss[[""PPeetteerr""]];;
CCoonnssoollee..WWrriitteeLLiinnee((""PPeetteerr''ss mmaarrkk:: {{00}}"",, ppeetteerrMMaarrkk));;
CCoonnssoollee..WWrriitteeLLiinnee((""IIss PPeetteerr iinn tthhee hhaasshh ttaabbllee:: {{00}}"",,
ssttuuddeennttssMMaarrkkss..CCoonnttaaiinnssKKeeyy((""PPeetteerr""))));;
CCoonnssoollee..WWrriitteeLLiinnee((""SSttuuddeennttss aanndd ggrraaddeess::""));;
ffoorreeaacchh ((vvaarr ppaaiirr iinn ssttuuddeennttssMMaarrkkss))
{{
CCoonnssoollee..WWrriitteeLLiinnee((""{{00}} ---->> {{11}}"",, ppaaiirr..KKeeyy,,
ppaaiirr..VVaalluuee));;
}}
18
20. CCoouunnttiinngg tthhee WWoorrddss iinn aa TTeexxtt
ssttrriinngg tteexxtt == ""aa tteexxtt,, ssoommee tteexxtt,, jjuusstt ssoommee tteexxtt"";;
IIDDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>> wwoorrddssCCoouunntt ==
nneeww DDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>>(());;
ssttrriinngg[[]] wwoorrddss == tteexxtt..SSpplliitt(('' '',, '',,'',, ''..''));;
ffoorreeaacchh ((ssttrriinngg wwoorrdd iinn wwoorrddss))
{{
iinntt ccoouunntt == 11;;
iiff ((wwoorrddssCCoouunntt..CCoonnttaaiinnssKKeeyy((wwoorrdd))))
ccoouunntt == wwoorrddssCCoouunntt[[wwoorrdd]] ++ 11;;
wwoorrddssCCoouunntt[[wwoorrdd]] == ccoouunntt;;
}}
ffoorreeaacchh((vvaarr ppaaiirr iinn wwoorrddssCCoouunntt))
{{
CCoonnssoollee..WWrriitteeLLiinnee((""{{00}} -->> {{11}}"",, ppaaiirr..KKeeyy,, ppaaiirr..VVaalluuee));;
}}
20
22. SSoorrtteeddDDiiccttiioonnaarryy
<<TTKKeeyy,,TTVVaalluuee>>
SSoorrtteeddDDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>>
iimmpplleemmeennttss tthhee AADDTT ""ddiiccttiioonnaarryy"" aass sseellff--
bbaallaanncciinngg sseeaarrcchh ttrreeee
EElleemmeennttss aarree aarrrraannggeedd iinn tthhee ttrreeee oorrddeerreedd bbyy kkeeyy
TTrraavveerrssiinngg tthhee ttrreeee rreettuurrnnss tthhee eelleemmeennttss iinn
iinnccrreeaassiinngg oorrddeerr
AAdddd // FFiinndd // DDeelleettee ppeerrffoorrmm lloogg22((nn)) ooppeerraattiioonnss
UUssee SSoorrtteeddDDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>>
wwhheenn yyoouu nneeeedd tthhee eelleemmeennttss ssoorrtteedd
OOtthheerrwwiissee uussee DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> –– iitt
hhaass bbeetttteerr ppeerrffoorrmmaannccee
22
23. CCoouunnttiinngg WWoorrddss ((AAggaaiinn))
ssttrriinngg tteexxtt == ""aa tteexxtt,, ssoommee tteexxtt,, jjuusstt ssoommee tteexxtt"";;
IIDDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>> wwoorrddssCCoouunntt ==
nneeww SSoorrtteeddDDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>>(());;
ssttrriinngg[[]] wwoorrddss == tteexxtt..SSpplliitt((' ',, ',,',, '..'));;
ffoorreeaacchh ((ssttrriinngg wwoorrdd iinn wwoorrddss))
{{
iinntt ccoouunntt == 11;;
iiff ((wwoorrddssCCoouunntt..CCoonnttaaiinnssKKeeyy((wwoorrdd))))
ccoouunntt == wwoorrddssCCoouunntt[[wwoorrdd]] ++ 11;;
wwoorrddssCCoouunntt[[wwoorrdd]] == ccoouunntt;;
}}
ffoorreeaacchh((vvaarr ppaaiirr iinn wwoorrddssCCoouunntt))
{{
CCoonnssoollee..WWrriitteeLLiinnee((""{{00}} -->> {{11}}"",, ppaaiirr..KKeeyy,, ppaaiirr..VVaalluuee));;
}}
23
25. IICCoommppaarraabbllee<<TT>>
DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> rreelliieess oonn
OObbjjeecctt..EEqquuaallss(()) –– ffoorr ccoommppaarriinngg tthhee kkeeyyss
OObbjjeecctt..GGeettHHaasshhCCooddee(()) –– ffoorr ccaallccuullaattiinngg tthhee
hhaasshh ccooddeess ooff tthhee kkeeyyss
SSoorrtteeddDDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> rreelliieess oonn
IICCoommppaarraabbllee<<TT>> ffoorr oorrddeerriinngg tthhee kkeeyyss
BBuuiilltt--iinn ttyyppeess lliikkee iinntt,, lloonngg,, ffllooaatt,, ssttrriinngg
aanndd DDaatteeTTiimmee aallrreeaaddyy iimmpplleemmeenntt EEqquuaallss(()),,
GGeettHHaasshhCCooddee(()) aanndd IICCoommppaarraabbllee<<TT>>
OOtthheerr ttyyppeess uusseedd wwhheenn uusseedd aass ddiiccttiioonnaarryy kkeeyyss
sshhoouulldd pprroovviiddee ccuussttoomm iimmpplleemmeennttaattiioonnss
25
26. IImmpplleemmeennttiinngg EEqquuaallss(()) aanndd
GGeettHHaasshhCCooddee(())
26
ppuubblliicc ssttrruucctt PPooiinntt
{{
ppuubblliicc iinntt XX {{ ggeett;; sseett;; }}
ppuubblliicc iinntt YY {{ ggeett;; sseett;; }}
ppuubblliicc oovveerrrriiddee bbooooll EEqquuaallss((OObbjjeecctt oobbjj))
{{
iiff ((!!((oobbjj iiss PPooiinntt)) |||| ((oobbjj ==== nnuullll)))) rreettuurrnn ffaallssee;;
PPooiinntt pp == ((PPooiinntt))oobbjj;;
rreettuurrnn ((XX ==== pp..XX)) &&&& ((YY ==== pp..YY));;
}}
ppuubblliicc oovveerrrriiddee iinntt GGeettHHaasshhCCooddee(())
{{
rreettuurrnn ((XX <<<< 1166 || XX >>>> 1166)) ^^ YY;;
}}
}}
27. IImmpplleemmeennttiinngg IICCoommppaarraabbllee<<TT>>
27
ppuubblliicc ssttrruucctt PPooiinntt :: IICCoommppaarraabbllee<<PPooiinntt>>
{{
ppuubblliicc iinntt XX {{ ggeett;; sseett;; }}
ppuubblliicc iinntt YY {{ ggeett;; sseett;; }}
ppuubblliicc iinntt CCoommppaarreeTToo((PPooiinntt ootthheerrPPooiinntt))
{{
iiff ((XX !!== ootthheerrPPooiinntt..XX))
{{
rreettuurrnn tthhiiss..XX..CCoommppaarreeTToo((ootthheerrPPooiinntt..XX));;
}}
eellssee
{{
rreettuurrnn tthhiiss..YY..CCoommppaarreeTToo((ootthheerrPPooiinntt..YY));;
}}
}}
}}
29. SSeett aanndd BBaagg AADDTTss
TThhee aabbssttrraacctt ddaattaa ttyyppee ((AADDTT)) ""sseett"" kkeeeeppss aa sseett ooff
eelleemmeennttss wwiitthh nnoo dduupplliiccaatteess
SSeettss wwiitthh dduupplliiccaatteess aarree aallssoo kknnoowwnn aass AADDTT ""bbaagg""
SSeett ooppeerraattiioonnss::
AAdddd((eelleemmeenntt))
CCoonnttaaiinnss((eelleemmeenntt)) ttrruuee // ffaallssee
DDeelleettee((eelleemmeenntt))
UUnniioonn((sseett)) // IInntteerrsseecctt((sseett))
SSeettss ccaann bbee iimmpplleemmeenntteedd iinn sseevveerraall wwaayyss
LLiisstt,, aarrrraayy,, hhaasshh ttaabbllee,, bbaallaanncceedd ttrreeee,, ......
29
31. HHaasshhSSeett<<TT>>
HHaasshhSSeett<<TT>> iimmpplleemmeennttss AADDTT sseett bbyy hhaasshh ttaabbllee
EElleemmeennttss aarree iinn nnoo ppaarrttiiccuullaarr oorrddeerr
AAllll mmaajjoorr ooppeerraattiioonnss aarree ffaasstt::
AAdddd((eelleemmeenntt)) –– aappppeennddss aann eelleemmeenntt ttoo tthhee sseett
DDooeess nnootthhiinngg iiff tthhee eelleemmeenntt aallrreeaaddyy eexxiissttss
RReemmoovvee((eelleemmeenntt)) –– rreemmoovveess ggiivveenn eelleemmeenntt
CCoouunntt –– rreettuurrnnss tthhee nnuummbbeerr ooff eelleemmeennttss
UUnniioonnWWiitthh((sseett)) // IInntteerrsseeccttWWiitthh((sseett)) ––
ppeerrffoorrmmss uunniioonn // iinntteerrsseeccttiioonn wwiitthh aannootthheerr sseett
31
32. HHaasshhSSeett<<TT>> –– EExxaammppllee
32
IISSeett<<ssttrriinngg>> ffiirrssttSSeett == nneeww HHaasshhSSeett<<ssttrriinngg>>((
nneeww ssttrriinngg[[]] {{ ""SSQQLL"",, ""JJaavvaa"",, ""CC##"",, ""PPHHPP"" }}));;
IISSeett<<ssttrriinngg>> sseeccoonnddSSeett == nneeww HHaasshhSSeett<<ssttrriinngg>>((
nneeww ssttrriinngg[[]] {{ ""OOrraaccllee"",, ""SSQQLL"",, ""MMyySSQQLL"" }}));;
IISSeett<<ssttrriinngg>> uunniioonn == nneeww HHaasshhSSeett<<ssttrriinngg>>((ffiirrssttSSeett));;
uunniioonn..UUnniioonnWWiitthh((sseeccoonnddSSeett));;
PPrriinnttSSeett((uunniioonn));; //// SSQQLL JJaavvaa CC## PPHHPP OOrraaccllee MMyySSQQLL
pprriivvaattee ssttaattiicc vvooiidd PPrriinnttSSeett<<TT>>((IISSeett<<TT>> sseett))
{{
ffoorreeaacchh ((vvaarr eelleemmeenntt iinn sseett))
{{
CCoonnssoollee..WWrriittee((""{{00}} "",, eelleemmeenntt));;
}}
CCoonnssoollee..WWrriitteeLLiinnee(());;
}}
33. SSoorrtteeddSSeett<<TT>>
SSoorrtteeddSSeett<<TT>> iimmpplleemmeennttss AADDTT sseett bbyy bbaallaanncceedd
sseeaarrcchh ttrreeee
EElleemmeennttss aarree ssoorrtteedd iinn iinnccrreeaassiinngg oorrddeerr
EExxaammppllee::
33
IISSeett<<ssttrriinngg>> ffiirrssttSSeett == nneeww SSoorrtteeddSSeett<<ssttrriinngg>>((
nneeww ssttrriinngg[[]] {{ ""SSQQLL"",, ""JJaavvaa"",, ""CC##"",, ""PPHHPP"" }}));;
IISSeett<<ssttrriinngg>> sseeccoonnddSSeett == nneeww SSoorrtteeddSSeett<<ssttrriinngg>>((
nneeww ssttrriinngg[[]] {{ ""OOrraaccllee"",, ""SSQQLL"",, ""MMyySSQQLL"" }}));;
IISSeett<<ssttrriinngg>> uunniioonn == nneeww HHaasshhSSeett<<ssttrriinngg>>((ffiirrssttSSeett));;
uunniioonn..UUnniioonnWWiitthh((sseeccoonnddSSeett));;
PPrriinnttSSeett((uunniioonn));; //// CC## JJaavvaa PPHHPP SSQQLL MMyySSQQLL OOrraaccllee
35. SSuummmmaarryy
DDiiccttiioonnaarriieess mmaapp kkeeyy ttoo vvaalluuee
CCaann bbee iimmpplleemmeenntteedd aass hhaasshh ttaabbllee oorr bbaallaanncceedd
sseeaarrcchh ttrreeee
HHaasshh--ttaabblleess mmaapp kkeeyyss ttoo vvaalluueess
RReellyy oonn hhaasshh--ffuunnccttiioonnss ttoo ddiissttrriibbuuttee tthhee kkeeyyss iinn tthhee
ttaabbllee
CCoolllliissiioonnss nneeeeddss rreessoolluuttiioonn aallggoorriitthhmm ((ee..gg..
cchhaaiinniinngg))
VVeerryy ffaasstt aadddd // ffiinndd // ddeelleettee
SSeettss hhoolldd aa ggrroouupp ooff eelleemmeennttss
HHaasshh--ttaabbllee oorr bbaallaanncceedd ttrreeee iimmpplleemmeennttaattiioonnss
35
37. EExxeerrcciisseess
11.. WWrriittee aa pprrooggrraamm tthhaatt ccoouunnttss iinn aa ggiivveenn aarrrraayy ooff
iinntteeggeerrss tthhee nnuummbbeerr ooff ooccccuurrrreenncceess ooff eeaacchh iinntteeggeerr..
UUssee DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>>..
EExxaammppllee:: aarrrraayy == {{33,, 44,, 44,, 22,, 33,, 33,, 44,, 33,, 22}}
22 22 ttiimmeess
33 44 ttiimmeess
44 33 ttiimmeess
11.. WWrriittee aa pprrooggrraamm tthhaatt eexxttrraaccttss ffrroomm aa ggiivveenn sseeqquueennccee
ooff ssttrriinnggss aallll eelleemmeennttss tthhaatt pprreesseenntt iinn iitt oodddd nnuummbbeerr
ooff ttiimmeess.. EExxaammppllee::
{{CC##,, SSQQLL,, PPHHPP,, PPHHPP,, SSQQLL,, SSQQLL }} {{CC##,, SSQQLL}}
37
38. EExxeerrcciisseess ((22))
33.. WWrriittee aa pprrooggrraamm tthhaatt ccoouunnttss hhooww mmaannyy ttiimmeess eeaacchh
wwoorrdd ffrroomm ggiivveenn tteexxtt ffiillee wwoorrddss..ttxxtt aappppeeaarrss iinn iitt..
TThhee cchhaarraacctteerr ccaassiinngg ddiiffffeerreenncceess sshhoouulldd bbee iiggnnoorreedd..
TThhee rreessuulltt wwoorrddss sshhoouulldd bbee oorrddeerreedd bbyy tthheeiirr nnuummbbeerr
ooff ooccccuurrrreenncceess iinn tthhee tteexxtt.. EExxaammppllee::
iiss 22
tthhee 22
tthhiiss 33
tteexxtt 66
38
TThhiiss iiss tthhee TTEEXXTT.. TTeexxtt,, tteexxtt,, tteexxtt –– TTHHIISS TTEEXXTT!!
IIss tthhiiss tthhee tteexxtt??
39. EExxeerrcciisseess ((33))
39
44.. IImmpplleemmeenntt tthhee ddaattaa ssttrruuccttuurree ""hhaasshh ttaabbllee"" iinn aa ccllaassss
HHaasshhTTaabbllee<<KK,,TT>>.. KKeeeepp tthhee ddaattaa iinn aarrrraayy ooff lliissttss ooff kkeeyy--
vvaalluuee ppaaiirrss ((LLiinnkkeeddLLiisstt<<KKeeyyVVaalluueePPaaiirr<<KK,,TT>>>>[[]]) wwiitthh
iinniittiiaall ccaappaacciittyy ooff 1166.. WWhheenn tthhee hhaasshh ttaabbllee llooaadd rruunnss
oovveerr 7755%%,, ppeerrffoorrmm rreessiizziinngg ttoo 22 ttiimmeess llaarrggeerr ccaappaacciittyy..
IImmpplleemmeenntt tthhee ffoolllloowwiinngg mmeetthhooddss aanndd pprrooppeerrttiieess::
AAdddd((kkeeyy,, vvaalluuee)),, Fiinndd((kkeeyy))vvaalluuee,,
RReemmoovvee(( kkeeyy)),, CCoouunntt,, CClleeaarr(()),, tthhiiss[[]],, KKeeyyss.. TTrryy
ttoo mmaakkee tthhee hhaasshh ttaabbllee ttoo ssuuppppoorrtt iitteerraattiinngg oovveerr iittss
eelleemmeennttss wwiitthh ffoorreeaacchh..
55.. IImmpplleemmeenntt tthhee ddaattaa ssttrruuccttuurree ""sseett"" iinn aa ccllaassss
HHaasshheeddSSeett<<TT>> uussiinngg yyoouurr ccllaassss HHaasshhTTaabbllee<<TT,,TT>> ttoo
hhoolldd tthhee eelleemmeennttss.. IImmpplleemmeenntt aallll ssttaannddaarrdd sseett
ooppeerraattiioonnss lliikkee AAdddd((TT)),, Fiinndd((TT)),, RReemmoovvee((TT)),, CCoouunntt,,
CClleeaarr(()),, uunniioonn aanndd iinntteerrsseecctt..