Hashing og hashtabeller
|
|
|
- Stefan Ibsen
- 10 år siden
- Visninger:
Transkript
1 Datastrukturer & Algoritmer, Datalogi C Forelæsning 12/ Hashing og hashtabeller Teknik til at repræsentere mængder Konstant tid for finde og indsætte men ingen sortering af elementerne Specielt udviklet til Meget stort udfaldsrum... hvor faktiske mængder er relativt små i forhold til udfaldsrum Standardeksempel nr. 1: Udfaldsrum = mængden af alle mulige navne på variable, klasser... Faktisk mængde = mængden af alle navne i et bestemt Javaprogram Dagens program Indledningsøvelse: repræsentation af mængder over små udfaldsrum Princippet i Hashing: Om hashingfunktioner Kollisioner, dvs. to forskellige objekter hasher til samme tal Løsning på problemet 0: Hægtede lister Løsning på problemet 1: Lineær afprøvning Løsning på problemet 2: Kvadratisk afprøvning Kort om implementation i Javas API o Med en lille afstikker om at heltal i Java er skøre (1)
2 Hashing??? Ordbogsopslag: hash v.t. (VP 1, 10 with up) chop or cut up (meat) into small pieces. n. 1. [U] (dish of) cooked meat,~ed and re-cooked. 2. (fig.) make a ~ of sth., do it very badly, make a mess of it. settle sb. s ~, deal with him in such a way that he gives no more trouble. Teknik til repræsentation af mængder over Meget stort udfaldsrum... hvor faktiske mængder er relativt små i forhold til udfaldsrum Ideen: at afbilde stort adresserum over i et lille: X h h(x) et tal mellem 0 og max (2)
3 Indledende øvelse: Repræsentation af mængder over små udfaldsrum Pascal (Wirth, ca. 1974) type fisk = (torsk, sild, rødspætte, kuller, kulmule, fjæsing, gråsej, pighvar, slethvar, laks, ørred, tobis); var nogle_fisk, flere_fisk, endnu_flere_fisk : set of fisk; nogle_fisk := [torsk..kuller, tobis, slethvar]; flere_fisk := [torsk, rødspætte..fjæsing, laks, slethvar]; endnu_flere_fisk := nogle_fisk + flere_fisk; // foreningsmgd nogle_fisk U flere_fisk Compiler tildeler hvert symbol et nummer torsk -> 0 sild -> 1... tobis -> 11 En mængde er en bitvektor, f.eks. nogle_fisk = flere_fisk = endnu_flere_fisk = eller U implementeret ved bitvis logisk eller OBS: Java understøtter bitvise operationer, så princippet kan eftergøres men man må selv lege compiler! Forslag: static final int torsk = 1; static final int sild = 2; static final int rødspætte = 4; static final int kuler = 8; int nogle_fisk = torsk+sild+rødspætte+kuller+tobis+slethvar; endnu_flere_fisk = nogle_fisk flere_fisk; //bitvis eller (3)
4 Princippet i Hashing: Komprimere adresserum vha hashfunktion X h h(x) et tal mellem 0 og max Og bruge princippet fra bitvektoren: 1 jeg er med; 0 jeg er ikke med. Problem: Kollision, når to elementer hasher til samme værdi $ x, y: x y /\ h(x)=h(y) Hvad betyder bit(7)=1?? (4)
5 En mulig løsning på problemet, hægtet liste af objekter: Objekt X Objekt Y X Y /\ h(x) = h(y) Nu ikke bitvektor men array 0..max af hægtede lister af objekter (dvs. repræsentation af objekter i den store mængde (udfaldsrummet). Ikke populær da det giver ekstra arbejde med at forfølge referencer hver gang, selv når tabellen er stort set tom! De sædvanlige løsninger på problemet: Hvis pladsen er optaget så find en anden plads i tabellen (efter fast algoritme): Objekt X Objekt Y Af finde Y i tabellen: Hvis tabel( h(y) ) tom, så er Y ikke med; Hvis tabel( h(y) ) refererer til objekt Y så OK; Hvis tabel( h(y) ) refererer til objekt X ( Y) så prøv andet steds...; (5)
6 Kunsten at finde en anden plads i tabellen Den oplagte metode: Linear probing Prøv næste ubrugte celle: Antag h(x) = h(y) = 117 h(z) = 118 h(æ) = : X 117: X 118: 118: Y 119: 119: 120: 120: : X 117: X 118: Y 118: Y 119: Z 119: Z 120: 120: Æ Fordele: Virker altid indtil tabellen er helt fuld Ulemper: Der dannes klumper. Dvs. for mange indsætte og finde kolliderer flere gange! (Kræver et matematisk argument, som vi springer over) (6)
7 Den mest udbredte strategi: Quadratic probing hvis plads h(y) er ledig placér Y der; ellers {i = 1; hvis plads (h(y) + i 2 )%tabelstørrelse ledig, så placér Y der; ellers {i++; goto } ; } Hvad får vi ud af det? En matematiker kan bevise: Klumpningsgraden mindre Hvis tabelstørrelse er et primtal, så besøges halvdelen af alle celler i værste fald Dvs. fyldningsgrad på 50% eller derover er ikke godt! Tag det som et kuriøst faktum; ikke eksamenspensum at redegøre for det!! NB: Bogen gør et nummer ud af at optimere beregningen så multiplikation og modulo operation undgås 0 2 = = = = + 3 = = + 5 = = + 7 = dvs. nu følgende kode: currentpos += 2 * ++collisionnum -1; if (currentpos>= array.length) currentpos -= array.length; OBS-OBS-OBS: En god compiler oversætter 2 * til højreskift En god compiler oversætter -1 til én maskininstruktion DEC <register> (7)
8 Om hashfunktionen Faktum vi må leve med: Kollisioner kan ikke undgås Krav til god hashfunktion skal sprede sig så godt som muligt over hele intervallet o ramme alle celler o og ca. lige meget o og det for en typisk mængde af objekter. skal kunne beregnes effektivt Eksempel på dårlig hashfunktion; tablesize = to-talspotens int hash(string key, int tablesize) { int hashval = 0; for (int i = 0; i < key.length(); i++) hashval = (hashval * key.charat(i)) % tablesize; return hashval} Læs i bogen i afsnit 20.2 om at primtal er gode, men der er meget meget meget mere i historien om, hvad der gør en hashfunktion god! For at forstå det, skal vi lige have en foredrag om heltal i Java som er uden kontrol for overflow!!! (8)
9 Hvad er overflow? Eksempel: Regning med tal op til 4 cifre ======== ======== ========???? En elektronisk dims kunne måske vise give ======== Svarer til OVERFLOW kontrol EEEE En dum mekaniske dims med fire hjul med hver 10 cifre vil sandsynligvis vise ======== Uden OVERFLOW kontrol (9)
10 Eksempel med 4-bits aritmetik hvor bit længst til venstre er fortegn f.eks ) 2) ======== ======== Med overflowkontrol: Eksempel 2 giver anledning til fejlmeddelelse Uden overflowkontrol: Eksempel 2 regner forkert: = 6!!!! (ralle) Java s heltal opfører sig ca. på den måde: public final class OverFlowTest { public static void main( String [ ] args ) { int n = 0;int i; n = ; // maximal int System.out.println("n " + n); n = n+17; System.out.println("n " + n); for(i=0; i< ; i=i ) {n=n+1;} System.out.println("SLUT); } } n n ^C Programmet gik i løkke pga. overflow og manglende overflowcheck (10)
11 Om hashing i Java API Standardklasser for HashSet ~ svarende til de hashede mængder vi har set HashMap ~ afbildning repræsenteret som hashede mængder, hvor vi for en objekt X, i tabellen finder ref. til objekt [fra X, til Værdi ] Bemærk at den generelle klasse Object har metode hashcode() som returnerer bare-et-eller-andet-heltal. For at kunne bruge HashMap og HashSet på sine egne objekter må man alså huske at skrive en hascode() metode (11)
12 Eksempel på indbygget hashcode() for tekststrenge: public final class HaCo { public static void printhash(string s) {System.out.println(s + ": " + s.hashcode());} public static void main( String [ ] args ) { printhash("a"); printhash("b"); printhash("c"); printhash("aa"); printhash("ab"); printhash("ac"); printhash("ba"); printhash("der var en gang en mand"); printhash("han boede i en spand"); printhash("hsdjazd noperun fgkdfgo krpot, krpot, poylgkrs okerpil mkdfg!"); }} a: 97 b: 98 c: 99 aa: 3104 ab: 3105 ac: 3106 ba: 3135 Der var en gang en mand: Han boede i en spand: Hsdjazd noperun fgkdfgo krpot, krpot, poylgkrs okerpil mkdfg!: Både positive og negative tal returneres Dvs. implementation af hashtabel skal teste >= 0 og tage modulo (%) tabelstørrelse (12)
13 Implementation af Java.util s HashSet og HashSet: Baseret på quadratic probing med primtal som tabellængde Re-hashing, hvis tabel bliver halvt fuld, så fordobles tabellen (rundet op til næste primtal) Sletning foretages ved at indsætte en boolean i hver celle active = true ~ som vi forventer active = false ~ pågældende felt har været indsat, men slettet igen (og skal ignoreres) Nødvendig pga. probing da ægte sletning for bøvlet! Ellers ingen overraskelser, kig på koden i afsnit ~ Tak for Deres opmærksomhed ~ (13)
19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse.
19 Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse. Sammenligning af hashtabeller og søgetræer. 281 Hashing-problemet (1). Vi ønsker at afbilde n objekter på en tabel
Hashing. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Philip Bille
Hashing Ordbøger Hægtet hashing Hashfunktioner Lineær probering Philip Bille Hashing Ordbøger Hægtet hashing Hashfunktioner Lineær probering Ordbøger Ordbøger. Vedligehold en dynamisk mængde S af elementer.
Merging og Hashing (del I)
Merging og Hashing (del I) Tilgang til data To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer. API for sekventiel tilgang
Abstrakte datatyper C#-version
Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype
Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer.
Merging og Hashing Tilgang til data To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer. API for sekventiel tilgang (API =
Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)
Skriftlig Eksamen Algoritmer og Datastrukturer (DM507) Institut for Matematik og Datalogi Syddansk Universitet, Odense Onsdag den 0. juni 009, kl. 9 Alle sædvanlige hjælpemidler (lærebøger, notater, osv.)
University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2
DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld
DM502. Peter Schneider-Kamp ([email protected]) http://imada.sdu.dk/~petersk/dm502/
DM502 Peter Schneider-Kamp ([email protected]) http://imada.sdu.dk/~petersk/dm502/ 1 DM502 Bog, ugesedler og noter De første øvelser Let for nogen, svært for andre Kom til øvelserne! Lav opgaverne!
Danmarks Tekniske Universitet
side af sider Danmarks Tekniske Universitet Skriftlig prøve, den 6. maj 0. Kursusnavn: Algoritmer og datastrukturer I Kursus nr. 005. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed: timer Vægtning
Skriftlig eksamen i Datalogi
Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2
Skriftlig Eksamen DM507 Algoritmer og Datastrukturer
Skriftlig Eksamen DM507 Algoritmer og Datastrukturer Institut for Matematik og Datalogi Syddansk Universitet, Odense Mandag den 6. juni 2016, kl. 15:00 19:00 Besvarelsen skal afleveres elektronisk. Se
Løsning af møntproblemet
Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet
Danmarks Tekniske Universitet
side af sider Danmarks Tekniske Universitet Skriftlig prøve, den 6. maj 0. Kursusnavn: Algoritmer og datastrukturer Kursus nr. 06. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed: timer Vægtning
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007
AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til [email protected]. Besvarelsen skal
Rekursion og dynamisk programmering
Rekursion og dynamisk programmering Datastrukturer & Algoritmer, Dat C Forelæsning 12/10-2004 Henning Christiansen Rekursion: at en procedure kalder sig selv eller et antal metoder kalder hinanden gensidigt.
DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004
Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Skriftlig eksamen torsdag den 3. juni 2004 Opgaverne vægtes i forhold til tidsangivelsen herunder, og hver opgaves besvarelse bedømmes
Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations
Tabelbegrebet Klassediagrammer (III) Tabeller og qualified associations originally by Michael R. Hansen modified/extended by Anne E. Haxthausen Informatics and Mathematical Modelling Technical University
Skriftlig Eksamen Algoritmer og Datastrukturer (dads)
Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Datalogisk Institut Aarhus Universitet Mandag den 27. maj 2002, kl. 9.00 13.00 Opgave 1 (25%) Denne opgave handler om multiplikation af positive heltal.
Danmarks Tekniske Universitet
Eksamen 02105, F14 side 1 af 14 Danmarks Tekniske Universitet Skriftlig prøve, den 22. maj 2014. Kursusnavn: Algoritmer og datastrukturer 1 Kursusnummer: 02105 Hjælpemidler: Skriftlige hjælpemidler. Det
Bits, bit operationer, integers og floating point
Denne guide er oprindeligt udgivet på Eksperten.dk Bits, bit operationer, integers og floating point Denne artikel beskriver hvordan data gemmes som bits og hvordan man kan manipulere med bits. Den forudsætter
Ugeseddel 4 1. marts - 8. marts
Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Klasser og nedarvning
Datalogi C, Efterår 2004 OH er, forelæsning 21/9-2004 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Opgaven til senere: Generalisere
DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi
DATALOGISK INSTITUT, AARHUS UNIVERSITET Det Naturvidenskabelige Fakultet EKSAMEN Grundkurser i Datalogi Antal sider i opgavesættet (incl. forsiden): 12 (tolv) Eksamensdag: Tirsdag den 20. marts 2012, kl.
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Danmarks Tekniske Universitet
Eksamen 005, F side af sider Danmarks Tekniske Universitet Skriftlig prøve, den 6. maj 0. Kursusnavn: Algoritmer og datastrukturer I Kursus nr. 005. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed:
Danmarks Tekniske Universitet
side af sider Danmarks Tekniske Universitet Skriftlig prøve, den. maj 00. Kursusnavn Algoritmer og datastrukturer Kursus nr. 06. Tilladte hjælpemidler: Alle hjælpemidler. Vægtning af opgaverne: Opgave
1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer
1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer på disse. Typer af lister: Array Enkelt linket liste Dobbelt linket Cirkulære lister Typer af køer: FILO FIFO
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2012 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 15. marts, 2012 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Kursusarbejde 3 Grundlæggende Programmering
Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................
Prioritetskøer og hobe. Philip Bille
Prioritetskøer og hobe Philip Bille Plan Prioritetskøer Træer Hobe Repræsentation Prioritetskøoperationer Konstruktion af hob Hobsortering Prioritetskøer Prioritetskø Vedligehold en dynamisk mængde S af
02105 Eksamensnoter. Lasse Herskind S maj Sortering 3
02105 Eksamensnoter Lasse Herskind S153746 12. maj 2017 Indhold 1 Sortering 3 2 Analyse af algoritme 4 2.1 Køretid.......................................... 4 2.2 Pladsforbrug.......................................
University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3
DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget
Søgemaskineprojekt. Analyse og implementering af en søgemaskine og en crawler til denne. Vejleder: Theis Rauhe ([email protected])
Søgemaskineprojekt Analyse og implementering af en søgemaskine og en crawler til denne Morten Franck ([email protected]) Vejleder: Theis Rauhe ([email protected]) Peter G. Hansen ([email protected]) Påbegyndt den
DM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 20. april, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004
Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),
