hashing - forsiden - universitetet i oslo · ideen i hashing er å • lagre elementene i en array...

118
Hashing IN 2010 høsten 2019

Upload: others

Post on 05-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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
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

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

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

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

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

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

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

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

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

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

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

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

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

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

Å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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

map(dicDonary)nøkkelverdihashmaphashtabellhashfunksjonhashkodemodulo-operatorenload-faktorkollisjonshåndtering

åpenhashingseparatechaininglukkethashingåpenadresseringlineærprøvingkvadraDskprøvingsekundæropphopningdobbelhashingrehashing