Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array...
Transcript of Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array...
![Page 1: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/1.jpg)
Hashing
IN2010høsten2019
![Page 2: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/2.jpg)
Theterm"hash"comesbywayofanalogywithitsnon-technicalmeaning,to"chopandmix".Indeed,typicalhashfuncDons,likethemodoperaDon,"chop"theinputdomainintomanysub-domainsthatget"mixed"intotheoutputrangetoimprovetheuniformityofthekeydistribuDon.
![Page 3: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/3.jpg)
BrukesgjernenårviharganskemangeelementerogønskeretrasktsvarpåometgiJelementfinnesidatastrukturenellerikke.Eksempler:• Kompilatorer:Ervariabelydeklarert?• Stavekontroller:Finnesordxiordlisten?• Spill:HarjegalleredevurdertdennesDllingenviaenannen
trekkrekkefølge?• XMLparsering:NøklerbliraJribuJnavn,verdiblirinnhold.• Rutere:BestemmehvilkenlinjeendatapakkeskalsendesDl
(IP-adresseernøkkel).
Nestenallescriptspråkharhashsomdelavspråket.(Perl,Python,Ruby,PHP,…)
Nårbrukervihashtabeller?
![Page 4: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/4.jpg)
publicinterfaceMap<K,V>{publicVget(Kkey);publicvoidput(Kkey,Vvalue);publicVremove(Kkey);}
MapADT
![Page 5: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/5.jpg)
HashtabellerIdeenihashingerå• lagreelementeneienarray(hashtabell).• laverdienDlelementetx(ellerendelavx,dakaltnøkkelenDlx),bestemmeplasseringen(indeksen)Dlxihashtabellen.
EgenskaperDlengodhash-funksjon:• raskåberegne.• kangiallemuligeverdierfra0DltableSize-1.• girengodfordelingutovertabellindeksene.
x
0123456789
hash(x)
![Page 6: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/6.jpg)
Idealsituasjonen• antallelementer=tableSize• hashfunksjonsomgirforskjelligeindekserforalleelementene
x
0123456789
hash(x)
![Page 7: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/7.jpg)
Idealsituasjonen• antallelementer=tableSize• hashfunksjonsomgirforskjelligeindekserforalleelementene
Foreksempel10elementermednøklene0,1,4,9,16,25,36,49,64,81
x
0123456789
![Page 8: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/8.jpg)
Idealsituasjonen• antallelementer=tableSize• hashfunksjonsomgirforskjelligeindekserforalleelementene
Foreksempel10elementermednøklene0,1,4,9,16,25,36,49,64,81hash(x)=√xhash(x)=sqrt(x) x
0123456789
![Page 9: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/9.jpg)
espehje
thoaivd
mailinek
joakimov
0
1
2
3
4
Objektermedennøkkel,k
n=5array.length
![Page 10: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/10.jpg)
espehje
thoaivd
mailinek
joakimov
0
1
2
3
4
Enfunksjonf(k)somgiret(stort)heltall,m
Objektermedennøkkel,k
n=5array.length
![Page 11: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/11.jpg)
espehje
thoaivd
mailinek
joakimov
740
751
842
864
0
1
2
3
4
Enfunksjonf(k)somgiret(stort)heltall,m
Objektermedennøkkel,k
n=5array.length
![Page 12: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/12.jpg)
espehje
thoaivd
mailinek
joakimov
740
751
842
864
0
1
2
3
4
Enfunksjonf(k)somgiret(stort)heltall,m
Objektermedennøkkel,k
Enfunksjonf(m)somgiretheltalliiintervallet[0,n-1]
n=5array.length
![Page 13: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/13.jpg)
espehje
thoaivd
mailinek
joakimov
740
751
842
864
0
1
2
3
4
Objektermedennøkkel,k
Enfunksjonf(m)somgiretheltalliiintervallet[0,n-1]
n=5array.length
m=f(k)=∑k.charAt(i)
![Page 14: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/14.jpg)
espehje
thoaivd
mailinek
joakimov
740
751
842
864
0
1
2
3
4
Objektermedennøkkel,k
n=5array.length
m=f(k)=∑k.charAt(i) i=mmodn
![Page 15: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/15.jpg)
Modulo-operatoren
![Page 16: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/16.jpg)
espehje
thoaivd
mailinek
joakimov
740
751
842
864
0
1
2
3
4
Objektermedennøkkel,k
n=5array.length
m=f(k)=∑k.charAt(i) i=mmod5
![Page 17: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/17.jpg)
espehje
thoaivd
mailinek
joakimov
740
751
842
864
0
1
2
4
0
1
2
3
4
Objektermedennøkkel,k
n=5array.length
m=f(k)=∑k.charAt(i) i=mmod5
![Page 18: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/18.jpg)
espehje
thoaivd
mailinek
joakimov
740
751
842
864
0
1
2
4
0
1
2
3
4
Objektermedennøkkel,k
n=5array.length
m=f(k)=∑k.charAt(i) i=mmod5
![Page 19: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/19.jpg)
espehje
thoaivd
mailinek
joakimov
740
751
842
864
0
1
2
4
0
1
2
3
4
Objektermedennøkkel,k
n=5array.length
m=f(k)=∑k.charAt(i) i=mmod5
![Page 20: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/20.jpg)
espehje
thoaivd
mailinek
joakimov
740
751
842
864
0
1
2
4
0
1
2
3
4
Objektermedennøkkel,k
n=5array.length
m=f(k)=∑k.charAt(i) i=mmod5
![Page 21: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/21.jpg)
espehje
thoaivd
mailinek
joakimov
740
751
842
864
0
1
2
4
0
1
2
3
4
Objektermedennøkkel,k
n=5array.length
m=f(k)=∑k.charAt(i) i=mmod5
![Page 22: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/22.jpg)
espehje
thoaivd
mailinek
joakimov
740
751
842
864
0
1
2
4
0
1
2
3
4
Objektermedennøkkel,k
n=5array.length
m=f(k)=∑k.charAt(i) i=mmod5
hashfunksjonh(k)
![Page 23: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/23.jpg)
m=f(k)=∑k.charAt(i) h(k)=mmodtableSize
hashfunksjonh(k)
![Page 24: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/24.jpg)
h(k)=(∑k.charAt(i))modtableSize
hashfunksjonh(k)
![Page 25: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/25.jpg)
0
1
2
3
4
Objektermedennøkkel,k
studenter.length=5
Oppgave:Hvordanfinneutometobjektmednøkkel“malinek”finnesiarrayenellerikke?
Person[]
studenter
![Page 26: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/26.jpg)
0
1
2
3
4
Objektermedennøkkel,k
studenter.length=5
studenter
Person[]
Oppgave:Hvordanfinneutometobjektmednøkkel“malinek”finnesiarrayenellerikke?VibrukerdensammehashfunksjonensomvibruktedavisaJeinn,ogfinneratnårk=“malinek”,såer∑k.charAt(i)=737.737mod5=2.Så«slårviopp»iarrayenpåindeks2:
![Page 27: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/27.jpg)
0
1
2
3
4
Objektermedennøkkel,k
studenter.length=5
studenter
Person[]
mailinek
Oppgave:Hvordanfinneutometobjektmednøkkel“malinek”finnesiarrayenellerikke?VibrukerdensammehashfunksjonensomvibruktedavisaJeinn,ogfinneratnårk=“malinek”,såer∑k.charAt(i)=737.737mod5=2.Så«slårviopp»iarrayenpåindeks2:
![Page 28: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/28.jpg)
0
1
2
3
4
Objektermedennøkkel,k
studenter.length=5
Oppgave:SeJinnetPerson-objektmedk=“sDanosc”.
studenter
Person[]
![Page 29: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/29.jpg)
0
1
2
3
4
Objektermedennøkkel,k
studenter.length=5
Oppgave:SeJinnetPerson-objektmedk=“sDanosc”.∑k.charAt(i)=868
studenter
Person[]
![Page 30: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/30.jpg)
0
1
2
3
4
Objektermedennøkkel,k
studenter.length=5
Oppgave:SeJinnetPerson-objektmedk=“sDanosc”.∑k.charAt(i)=868868mod5=3
studenter
Person[]
![Page 31: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/31.jpg)
0
1
2
3
4
Objektermedennøkkel,k
studenter.length=5
Oppgave:SeJinnetPerson-objektmedk=“sDanosc”.∑k.charAt(i)=868868mod5=3
studenter
Person[]
sDanosc
![Page 32: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/32.jpg)
0
1
2
3
4
Objektermedennøkkel,k
studenter.length=5
Oppgave:SeJinnetPerson-objektmedk=“sDanosc”.∑k.charAt(i)=868868mod5=3
studenter
Person[]
sDanosc
espehje
thoaivd
mailinek
joakimov
![Page 33: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/33.jpg)
0
1
2
3
4
Objektermedennøkkel,k
studenter.length=5
Oppgave:SeJinnetPerson-objektmedk=“sDanosc”.∑k.charAt(i)=868868mod5=3
studenter
Person[]
sDanosc
espehje
thoaivd
mailinek
joakimov
![Page 34: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/34.jpg)
0
1
2
3
4
Objektermedennøkkel,k
studenter.length=5
Oppgave:SeJinnetPerson-objektmedk=“philipnh”.
studenter
Person[]
sDanosc
espehje
thoaivd
mailinek
joakimov
![Page 35: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/35.jpg)
espehje
thoaivd
mailinek
joakimov
0
1
2
4
0
1
2
3
4
Objektermedennøkkel,k
n=5array.length
h(k)=(∑k.charAt(i))mod5
hashfunksjonh(k)
![Page 36: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/36.jpg)
espehje
thoaivd
mailinek
joakimov
0
1
2
4
0
1
2
3
4
Objektermedennøkkel,k
n=5array.length
h(k)=(∑k.charAt(i))mod5
hashfunksjonh(k)
![Page 37: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/37.jpg)
espehje
thoaivd
mailinek
joakimov
0
1
2
4
0
1
2
3
4
Objektermedennøkkel,k
n=5array.length
h(k)=(∑k.charAt(i))mod5
hashfunksjonh(k)
![Page 38: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/38.jpg)
espehje
thoaivd
mailinek
joakimov
0
1
2
4
0
1
2
3
4
Objektermedennøkkel,k
n=5array.length
h(k)=(∑k.charAt(i))mod5
hashfunksjonh(k)
![Page 39: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/39.jpg)
1. Bestemme(Dlordne)nøkkel.Dennemåværeunikslikattoforskjelligeelementerikkekanha/fåsammenøkkel.
![Page 40: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/40.jpg)
1. Bestemme(Dlordne)nøkkel.Dennemåværeunikslikattoforskjelligeelementerikkekanha/fåsammenøkkel.
2. Bestemme(iniDell)tabellengde.
![Page 41: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/41.jpg)
1. Bestemme(Dlordne)nøkkel.Dennemåværeunikslikattoforskjelligeelementerikkekanha/fåsammenøkkel.
2. Bestemme(iniDell)tabellengde.
3. Bestemmehashfunksjon(er).
![Page 42: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/42.jpg)
1. Bestemme(Dlordne)nøkkel.Dennemåværeunikslikattoforskjelligeelementerikkekanha/fåsammenøkkel.
2. Bestemme(iniDell)tabellengde.
3. Bestemmehashfunksjon(er).
4. Hvordanhåndterekollisjoner?
![Page 43: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/43.jpg)
1.MapisaninterfaceinJavaanditsconcreteimplementaDonsarecalledHashMapsandHashtables,amongother2.Python-DicDonaries3.C++-hash_map,unordered_mapandsoonaredifferentimplementaDons
![Page 44: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/44.jpg)
HashtabellerIdeenihashingerå• lagreelementeneienarray(hashtabell).• laverdienDlelementetx(ellerendelavx,dakalt
nøkkelenDlx),bestemmeplasseringen(indeksen)Dlxihashtabellen.
![Page 45: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/45.jpg)
Idealsituasjonen• nelementer• tabellmednplasser• hash-funksjonslikat
-denerleJ(rask)åberegne-forskjelligenøkkelverdiergirforskjelligeindekser
![Page 46: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/46.jpg)
Idealsituasjonen• nelementer• tabellmednplasser• hash-funksjonslikat
-denerleJ(rask)åberegne-forskjelligenøkkelverdiergirforskjelligeindekser
Eksempel:Hvisobjekteneharnummer(nøkkel)
0,1000,2000,…,48000,49000kanobjektetlagrespåindeksi/1000ientabellsomer50stor.
![Page 47: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/47.jpg)
Idealsituasjonen• nelementer• tabellmednplasser• hash-funksjonslikat
-denerleJ(rask)åberegne-forskjelligenøkkelverdiergirforskjelligeindekser
Eksempel:Hvisobjekteneharnummer(nøkkel)
0,1000,2000,…,48000,49000kanobjektetlagrespåindeksi/1000ientabellsomer50stor.Problem:Hvahvisobjekt4000fårnyJnummer3999?
![Page 48: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/48.jpg)
TidsforbrukEnhashtabellDlbyr• innse{ng• sle{ng• søking(gjenfinning)medkonstantgjennomsniJsDd.
![Page 49: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/49.jpg)
TidsforbrukEnhashtabellDlbyr• innse{ng• sle{ng• søking(gjenfinning)medkonstantgjennomsniJsDd.MenoperasjonersomfinnMinsteogskrivSortertharingengaran,er.
![Page 50: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/50.jpg)
Hash-funksjonerEksempel:• Heltallsomnøkler• Begrensetantalltabellindekser• Lahash-funksjonenvære
hash(x,tableSize)=xmodtableSizeDeJegirjevnfordelingforDlfeldigetall.
![Page 51: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/51.jpg)
Hash-funksjonerEksempel:• Heltallsomnøkler• Begrensetantalltabellindekser• Lahash-funksjonenvære
hash(x,tableSize)=xmodtableSizeDeJegirjevnfordelingforDlfeldigetall.
Passpåatnøkleneikkeharspesielleegenskaper;hvistableSize=10ogallenøklenesluJerpå0vilalleelementenehavnepåsammeindeks!Huskeregel:LaallDdtabellstørrelsenværeetprimtall.
![Page 52: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/52.jpg)
StrengersomnøklerVanligstrategi:tautgangspunktiascii/unicode-verdieneDlhverbokstavog”gjørnoelurt”.
![Page 53: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/53.jpg)
StrengersomnøklerFunksjon1:SummerverdieneDlhverbokstav.Fordel:Enkelåimplementereogberegne.Ulempe:Dårligfordelinghvistabellstørrelsenerstor.
![Page 54: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/54.jpg)
StrengersomnøklerFunksjon2:Brukbaredetreførstebokstaveneogvektdisse.Fordel:GreifordelingforDlfeldigestrenger.Ulempe:VanligspråkerikkeDlfeldig!
h(k)=(k.charAt(0)+k.charAt(1)*27+k.charAt(2)*729)modtableSize
![Page 55: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/55.jpg)
StrengersomnøklerFunksjon3:∑i=0
keySize-1key[keySize−i−1]*37iFordel:EnkelogrelaDvtraskåberegne.StortseJbranokfordeling.Ulempe:VanligspråkerikkeDlfeldig!
![Page 56: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/56.jpg)
![Page 57: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/57.jpg)
Hash-funksjoner─Oppsummering
![Page 58: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/58.jpg)
Hash-funksjoner─Oppsummering• Må(ihvertfallteoreDsk)kunnegiallemuligeverdier
fra0DltableSize-1.
![Page 59: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/59.jpg)
Hash-funksjoner─Oppsummering• Må(ihvertfallteoreDsk)kunnegiallemuligeverdier
fra0DltableSize-1.• Mågiengodfordelingutovertabellindeksene.
![Page 60: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/60.jpg)
Hash-funksjoner─Oppsummering• Må(ihvertfallteoreDsk)kunnegiallemuligeverdier
fra0DltableSize-1.• Mågiengodfordelingutovertabellindeksene.• TenkpåhvaslagsdatasomskalbrukesDlnøkler:
Fødselsårkangigodfordelingipersondatabaser,menikkeforenskoleklasse!
![Page 61: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/61.jpg)
Hash-funksjoner─Oppsummering• Må(ihvertfallteoreDsk)kunnegiallemuligeverdier
fra0DltableSize-1.• Mågiengodfordelingutovertabellindeksene.• TenkpåhvaslagsdatasomskalbrukesDlnøkler:
Fødselsårkangigodfordelingipersondatabaser,menikkeforenskoleklasse!
Generelt:BørværemangegangertableSizeførmangjørmodulo-operasjonen.
![Page 62: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/62.jpg)
hashCodeiJavainthashCode()Returnsahashcodevaluefortheobject
![Page 63: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/63.jpg)
hashCodeiJavainthashCode()ReturnsahashcodevaluefortheobjectTypiskenminneadressekonvertertDlint.ForskjelligeobjekterharallDdforskjellighashCode()
![Page 64: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/64.jpg)
hashCodeiJavainthashCode()ReturnsahashcodevaluefortheobjectTypiskenminneadressekonvertertDlint.ForskjelligeobjekterharallDdforskjellighashCode()Menhuskativåranvendelsekandetværeslikattoforskjelligeobjekterskalregnessomlikeogderformåfåsammehashverdi.DeJekanviløsemed@Override
![Page 65: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/65.jpg)
string_hashiPython01arguments:stringobject02returns:hash03funcDonstring_hash:04ifhashcached:05returnit06setlentostring'slength07iniDalizevarppoinDngto1stcharofstringobject08setxtovaluepointedbyple�shi�edby7bits09whilelen>=0:10setvarxto(1000003*x)xorvaluepointedbyp11incrementpointerp12setxtoxxorlengthofstringobject13cachexasthehashsowedon'tneedtocalculateitagain14returnxasthehash
![Page 66: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/66.jpg)
KollisjonshåndteringHvagjørvinårtoelementerhashesDldensammeindeksen?
![Page 67: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/67.jpg)
KollisjonshåndteringHvagjørvinårtoelementerhashesDldensammeindeksen?Åpenhashing:Elementermedsammehashverdisamlesienliste(ellerannenpassendestruktur).
![Page 68: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/68.jpg)
KollisjonshåndteringHvagjørvinårtoelementerhashesDldensammeindeksen?Åpenhashing:Elementermedsammehashverdisamlesienliste(ellerannenpassendestruktur).Lukkethashing:DersomenindekseropptaJ,prøvervienannenindeksinnDlvifinnerensomerledig.
![Page 69: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/69.jpg)
KollisjonshåndteringHvagjørvinårtoelementerhashesDldensammeindeksen?Åpenhashing:Elementermedsammehashverdisamlesienliste(ellerannenpassendestruktur).Lukkethashing:DersomenindekseropptaJ,prøvervienannenindeksinnDlvifinnerensomerledig.NBSleHngavelementerblirenfarligoperasjon.
![Page 70: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/70.jpg)
Åpenhashing(Separatechaining)
Forventerathashfunksjonenergod,slikatallelisteneblirkorte.Load-faktorenλerantallelementerihashtabelleniforholdDltabellstørrelsen.Foråpenhashingønskerviλ≈1.
0123456789
0
25
49 9
81 1
64 4
36 16
![Page 71: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/71.jpg)
Lukkethashing–åpenadressering
PrøveralternaDveindekserh0(x),h1(x),h2(x),…innDlvifinnerensomerledig.
![Page 72: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/72.jpg)
Lukkethashing–åpenadressering
PrøveralternaDveindekserh0(x),h1(x),h2(x),…innDlvifinnerensomerledig.hiergiJved
hi(x)=(hash(x)+f(i))modtableSizeslikatf(0)=0.
![Page 73: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/73.jpg)
Lukkethashing–åpenadressering
PrøveralternaDveindekserh0(x),h1(x),h2(x),…innDlvifinnerensomerledig.hiergiJved
hi(x)=(hash(x)+f(i))modtableSizeslikatf(0)=0.Merkatvitrengerenstørretabellennforåpenhashing–genereltønskerviherλ≈0,5.Skalsepåtremuligestrategier(valgavf):
![Page 74: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/74.jpg)
Lukkethashing–åpenadressering
PrøveralternaDveindekserh0(x),h1(x),h2(x),…innDlvifinnerensomerledig.hiergiJved
hi(x)=(hash(x)+f(i))modtableSizeslikatf(0)=0.Merkatvitrengerenstørretabellennforåpenhashing–genereltønskerviherλ≈0,5.Skalsepåtremuligestrategier(valgavf):• Lineærprøving• KvadraDskprøving• Dobbelhashing
![Page 75: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/75.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69
0123456789
![Page 76: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/76.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSize
0123456789
![Page 77: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/77.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizeStartmedhash(0,x),såmedhash(1,x),osv.innDlInndeksenerledig.
0123456789
![Page 78: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/78.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(0,89)=(89mod10)+0=9+0=9
0123456789
![Page 79: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/79.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(0,89)=(9+0)mod10=9
0123456789 89
![Page 80: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/80.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(0,18)=(8+0)mod10=8
0123456789 89
![Page 81: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/81.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(0,18)=(8+0)mod10=8
0123456789 89
18
![Page 82: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/82.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(0,49)=(9+0)mod10=9
0123456789 89
18
![Page 83: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/83.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(1,49)=(49mod10+1)mod10=(9+1)mod10=10mod10=0
0123456789 89
18
![Page 84: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/84.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(1,49)=(49mod10+1)mod10=(9+1)mod10=10mod10=0
0123456789 89
18
49
![Page 85: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/85.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(0,58)=(58mod10+0)mod10=(8+0)mod10=8mod10=8
0123456789 89
18
49
![Page 86: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/86.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(1,58)=(58mod10+1)mod10=(8+1)mod10=9mod10=9
0123456789 89
18
49
![Page 87: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/87.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(2,58)=(58mod10+2)mod10=(8+2)mod10=10mod10=0
0123456789 89
18
49
![Page 88: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/88.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(3,58)=(58mod10+3)mod10=(8+3)mod10=11mod10=1
0123456789 89
18
49
![Page 89: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/89.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(3,58)=(58mod10+3)mod10=(8+3)mod10=11mod10=1
0123456789 89
18
4958
![Page 90: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/90.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(0,69)=(69mod10+0)mod10=(9+0)mod10=9mod10=9
0123456789 89
18
4958
![Page 91: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/91.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(1,69)=(69mod10+1)mod10=(9+1)mod10=10mod10=0
0123456789 89
18
4958
![Page 92: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/92.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(2,69)=(69mod10+2)mod10=(9+2)mod10=11mod10=1
0123456789 89
18
4958
![Page 93: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/93.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(3,69)=(69mod10+3)mod10=(9+3)mod10=12mod10=2
0123456789 89
18
4958
![Page 94: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/94.jpg)
Lineærprøving
VelgerfDlåværeenlineærfunksjonavi,typiskf(i)=iEksempel:Input:89,18,49,58,69Hash-funksjon:
h(x,tableSize)=xmodtableSizehash(i,x)=(h(x,tableSize)+f(i))modtableSizehash(3,69)=(69mod10+3)mod10=(9+3)mod10=12mod10=2
0123456789 89
18
495869
![Page 95: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/95.jpg)
Lineærprøving–nyinput
VelgerfDlåværef(i)=iOppgave:Hvordanblirarrayenmeddenneinput:0,1,4,9,16,25,36,49,64,81Hash-funksjon:hash(i,x)=(xmod10+f(i))mod10
0123456789
![Page 96: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/96.jpg)
Lineærprøving–nyinput
0123456789
0149814251636649
VelgerfDlåværef(i)=iOppgave:Hvordanblirarrayenmeddenneinput:0,1,4,9,16,25,36,49,64,81Hash-funksjon:hash(i,x)=(xmod10+f(i))mod10
![Page 97: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/97.jpg)
Lukkethashingmedkvadra[skprøving
VelgerfDlåværeenkvadra[skfunksjonavi,somo�estf(i)=i2Eksempel:Input:89,18,49,58,69Hash-funksjon:hash(i,key)=(keymod10+f(i))mod10,derf(i)=i2
0123456789
![Page 98: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/98.jpg)
Lukkethashing−dobbelhashing
VelgerfKlåværefunksjonsombrukerennyhashfunksjon,typisk
f(i)=i×[R−(xmodR)]hvorReretprimtallmindreenntableSizeEksempelmedinput:89,18,49,58,69Hash-funksjoner:hash(0,key)=keymod10hash(i,key)=i×[7−(keymod7)](fori=1,2,…)
0123456789
![Page 99: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/99.jpg)
SelvommanlagersofisDkertehash-funksjonervedåpenadressering,risikerermanatselvomdetfinnesledigeindekser,vildealdrifinnes.DeJeskjernårhashfunksjonengirindeksverdiersom«gåriring».DeJekanikkeskjevedenkellineærprøving.
Sekundæropphopning
![Page 100: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/100.jpg)
Hvistabellenblirforfull,begynneroperasjoneneåtaveldiglangDd.Muligløsning:
Rehashing
![Page 101: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/101.jpg)
Hvistabellenblirforfull,begynneroperasjoneneåtaveldiglangDd.Muligløsning:• lagennyhashtabellsomeromtrentdobbeltsåstor
(menfortsaJprimtall!).
Rehashing
![Page 102: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/102.jpg)
Hvistabellenblirforfull,begynneroperasjoneneåtaveldiglangDd.Muligløsning:• lagennyhashtabellsomeromtrentdobbeltsåstor
(menfortsaJprimtall!).• gågjennomhvertelementidenopprinnelige
tabellen,beregndennyehash-verdienogseJinnpåreJplassidennyehashtabellen.
Rehashing
![Page 103: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/103.jpg)
Hvistabellenblirforfull,begynneroperasjoneneåtaveldiglangDd.Muligløsning:• lagennyhashtabellsomeromtrentdobbeltsåstor
(menfortsaJprimtall!).• gågjennomhverelementidenopprinnelige
tabellen,beregndennyehash-verdienogseJinnpåreJplassidennyehashtabellen.
DeSeerendyroperasjon,O(n),menopptrerrelaKvtsjelden(måhahaSn/2innseHngersidenforrigerehashing).
Rehashing
![Page 104: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/104.jpg)
Klassenjava.uDl.HashMap<K,V>:
JavasHashMap
publicclassHashMap<K,V>extendsAbstractMap<K,V>implementsMap<K,V>,Cloneable,Serializable
![Page 105: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/105.jpg)
Klassenjava.uDl.HashMap<K,V>:• implementererentabellsomgiJetobjektavtypeK
(key)gir(mapper)etobjektavtypeV(value)
JavasHashMap
publicclassHashMap<K,V>extendsAbstractMap<K,V>implementsMap<K,V>,Cloneable,Serializable
![Page 106: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/106.jpg)
Klassenjava.uDl.HashMap<K,V>:• implementererentabellsomgiJetobjektavtypeK
(key)gir(mapper)etobjektavtypeV(value)• implementererinterfacetMap
JavasHashMap
publicclassHashMap<K,V>extendsAbstractMap<K,V>implementsMap<K,V>,Cloneable,Serializable
![Page 107: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/107.jpg)
Klassenjava.uDl.HashMap<K,V>:• implementererentabellsomgiJetobjektavtypeK
(key)gir(mapper)etobjektavtypeV(value)• implementererinterfacetMap• brukeråpenhashing
JavasHashMap
publicclassHashMap<K,V>extendsAbstractMap<K,V>implementsMap<K,V>,Cloneable,Serializable
![Page 108: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/108.jpg)
Klassenjava.uDl.HashMap<K,V>:• implementererentabellsomgiJetobjektavtypeK
(key)gir(mapper)etobjektavtypeV(value)• implementererinterfacetMap• brukeråpenhashing• defaulttabellstørrelse16
JavasHashMap
publicclassHashMap<K,V>extendsAbstractMap<K,V>implementsMap<K,V>,Cloneable,Serializable
![Page 109: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/109.jpg)
Klassenjava.uDl.HashMap<K,V>:• implementererentabellsomgiJetobjektavtypeK
(key)gir(mapper)etobjektavtypeV(value)• implementererinterfacetMap• brukeråpenhashing• defaulttabellstørrelse16• load-faktorλ=0,75
JavasHashMap
publicclassHashMap<K,V>extendsAbstractMap<K,V>implementsMap<K,V>,Cloneable,Serializable
![Page 110: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/110.jpg)
Klassenjava.uDl.HashMap<K,V>:• implementererentabellsomgiJetobjektavtypeK
(key)gir(mapper)etobjektavtypeV(value)• implementererinterfacetMap• brukeråpenhashing• defaulttabellstørrelse16• load-faktorλ=0,75• rehashinghvisλ≥0,75
JavasHashMap
publicclassHashMap<K,V>extendsAbstractMap<K,V>implementsMap<K,V>,Cloneable,Serializable
![Page 111: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/111.jpg)
FrahJps://www.laurentluce.com/posts/python-dicDonary-implementaDon/
PythonDic[onaries
![Page 112: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/112.jpg)
FrahJps://www.laurentluce.com/posts/python-dicDonary-implementaDon/
• brukerlukkethashing
PythonDic[onaries
![Page 113: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/113.jpg)
FrahJps://www.laurentluce.com/posts/python-dicDonary-implementaDon/
• brukerlukkethashing• vedkollisjonbrukesf(i)=2i
PythonDic[onaries
![Page 114: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/114.jpg)
FrahJps://www.laurentluce.com/posts/python-dicDonary-implementaDon/
• brukerlukkethashing• vedkollisjonbrukesf(i)=2i• defaulttabellstørrelse8
PythonDic[onaries
![Page 115: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/115.jpg)
FrahJps://www.laurentluce.com/posts/python-dicDonary-implementaDon/
• brukerlukkethashing• vedkollisjonbrukesf(i)=2i• defaulttabellstørrelse8• load-faktorλ=0,75
PythonDic[onaries
![Page 116: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/116.jpg)
FrahJps://www.laurentluce.com/posts/python-dicDonary-implementaDon/
• brukerlukkethashing• vedkollisjonbrukesf(i)=2i• defaulttabellstørrelse8• load-faktorλ=0,75• rehashinghvisλ≥0,75
PythonDic[onaries
![Page 117: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/117.jpg)
FrahJps://www.laurentluce.com/posts/python-dicDonary-implementaDon/
• brukerlukkethashing• vedkollisjonbrukesf(i)=2i• defaulttabellstørrelse8• load-faktorλ=0,75• rehashinghvisλ≥0,75• nytabellstørrelseer4×b,derberopptaJeindekser
idengamletabellen.(Førstegangerblik6,siden6/8=0,75)
PythonDic[onaries
![Page 118: Hashing - Forsiden - Universitetet i Oslo · Ideen i hashing er å • lagre elementene i en array (hashtabell). • la verdien l elementet x (eller en del av x, da kalt nøkkelen](https://reader034.fdocuments.net/reader034/viewer/2022050501/5f93aaf56c44737ee6573f9e/html5/thumbnails/118.jpg)
map(dicDonary)nøkkelverdihashmaphashtabellhashfunksjonhashkodemodulo-operatorenload-faktorkollisjonshåndtering
åpenhashingseparatechaininglukkethashingåpenadresseringlineærprøvingkvadraDskprøvingsekundæropphopningdobbelhashingrehashing