Hashtabeller. TDA416, lp3 2016

Relevanta dokument
Datastrukturer. föreläsning 6. Maps 1

Föreläsning 6 Datastrukturer (DAT037)

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller

Föreläsning 5 Datastrukturer (DAT037)

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Programkonstruktion och. Datastrukturer

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Föreläsning 8. Mängd, Avbildning, Hashtabell

Interfacen Set och Map, hashtabeller

Magnus Nielsen, IDA, Linköpings universitet

Föreläsning 14 Innehåll

Föreläsning 10 Innehåll

Föreläsning 10 Innehåll. Diskutera. Hashtabeller. Hashfunktion. hashfunktion. hashkod (ett heltal)

Föreläsning 11 Innehåll

Föreläsning 8. Mängd, Avbildning, Hashtabell

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

Diskutera. Hashfunktion

Innehåll. F7: Tabell, hashtabell, relation & lexikon. Gränsyta till Tabell. Tabell. Tabell Hashtabell Relation Lexikon.

Inlämningsuppgift och handledning

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Inlämningsuppgift och handledning. Föreläsning 11 Innehåll. Diskutera. Hashtabeller

Innehåll. Föreläsning 10. Specifikation. Mängd. Specifikation. Konstruktion av mängd. Mängd Lexikon Hashtabell

Algoritmer och datastrukturer

Sid 1 Kapitel 7: Sökning (Hashning) Hashning

Datastrukturer och algoritmer

Programmering för språkteknologer II, HT2011. Rum

Tommy Färnqvist, IDA, Linköpings universitet. 1 Administrativ information Upplägg... 1

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Föreläsning 4 Datastrukturer (DAT037)

Datastrukturer. föreläsning 10. Maps 1

Tentamen Datastrukturer D DAT 035/INN960

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

Tentamen Datastrukturer D DAT 035/INN960

Datastrukturer. föreläsning 10. Maps 1

Föreläsning Datastrukturer (DAT037)

Programmering för språkteknologer II, HT2014. Rum

Övningsuppgifter #11, Programkonstruktion och datastrukturer

Sökning och sortering

Tentamen kl Uppgift 4. Uppgift 5

Träd Hierarkiska strukturer

Vad har vi pratat om i kursen?

Hashing Bakom kulisserna på Pythons dictionary

Hashing Bakom kulisserna på Pythons dictionary. Leta i listor Osorterade listor. Leta i listor Sorterade listor

Hashtabeller! (& kanske lite sortering)

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

Föreläsning 13 Datastrukturer (DAT037)

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Föreläsning 10 Datastrukturer (DAT037)

Datastrukturer och algoritmer. Innehåll. Trie. Informell specifikation. Organisation av Trie. Föreläsning 13 Trie och Sökträd.

Hashing Bakom kulisserna på Pythons dictionary

Föreläsning Datastrukturer (DAT036)

Programkonstruktion och. Datastrukturer

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Tentamen Datastrukturer D DAT 036/DIT960

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Övningen vill visa på vikten av valet av datastruktur, trots att de ofta erbjuder samma funktionalitet genom sina gränssnitt.

Algoritmer och datastrukturer 2012, fo rela sning 8

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Övning 4. Hashning, sortering, prioritetskö, bästaförstsökning. Hitta på en perfekt hashfunktion för atomer. Hur stor blir hashtabellen?

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

Föreläsning Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037)

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 9 Innehåll

Datastrukturer. föreläsning 9. Maps 1

Datastrukturer. Föreläsning 5. Maps 1

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Länkade strukturer, parametriserade typer och undantag

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Specifikationer för tabellfunktionerna. Operationer på tabellen

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

Exempeltenta GruDat 2002/2003

Datastrukturer. föreläsning 7. Maps 1

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Innehåll. Föreläsning 11. Organisation av Trie. Trie Ytterligare en variant av träd. Vi har tidigare sett: Informell specifikation

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035

Föreläsning 13 Innehåll

Samlingar Collection classes

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

Grundläggande datalogi - Övning 4

Seminarium 13 Innehåll

Föreläsning 9 Innehåll

Föreläsning 7. Träd och binära sökträd

Datastrukturer och algoritmer

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Tentamen (del 2) (4 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Öppna filer och filsystem i PintOS Hemuppgift TDDI81, 21/

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

3. Toppkvinnor på hög Låt lådan och de två kvinnornas famnar utgöra stackarna L, K1 respektive K2. Från början finns alla kort i L.

Upplägg. Binära träd. Träd. Binära träd. Binära träd. Antal löv på ett träd. Binära träd (9) Binära sökträd (10.1)

Föreläsning 1 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

Transkript:

Hashtabeller TDA416, lp3 2016

Mängder och avbildningar (Sets and Maps) I den abstrakta datatypen avbildning/uppslagstabell (Map) lagras nyckelvärde-par. Grundläggande operationerna är insättning, borttagning och sökning (uppslag). Ett nyckel-värde-par identifieras av sin nyckel. Varje nyckel måste alltså vara unik i avbildningen, medan olika nycklar kan höra ihop med samma värde. Slår man upp en nyckel får man det associerade värdet som svar (eller inget, om nyckeln inte finns). Mängder kan ses som ett specialfall av avbildningar där värdena inte innehåller någon data. Informationen som datastrukturen lagrar är då enbart vilka nycklar/element som finns i mängden. k " v " k # k $ v # k % v $ x x $ " x# x % x (

Avbildningar implementeringar För naiv implementering (osorterad lista) tar operationerna O(n). Vi har sett att balanserade sökträd förbättrar detta till O(log n). I många tillämpningar krävs ännu bättre prestanda. Med hash-tabeller kan man få O(1).

Hashtabell Idén med hashtabellär att använda en arrayoch en funktion, f(k), som baserat på nyckeln snabbt beräknar ett index där nyckel-värde-paret ska lagras / återfinns. På det viset undviker man att skapa en array med en plats för varje tänkbar nyckel. Det är avgörandeför oftastär mängden tänkbara nycklar enorm. (T ex en sökmotor som har en avbildningmellan sökord och URLer. Det finns enormt många bokstavskombinationer, men bara en bråkdelutgör riktiga ord.) När man söker efter en nyckel och hittar ett nyckelvärde-par på hashfunktionens index måsteman kontrollera att det är sammanyckel. [0] [1] k3 v3 [2] k1 v1 [3] [4] k2 v2 [5] [6] k4 v4 f(k3)=1 f(k1)=2 f(k2)=4 f(k4)=6

Hashkod Hashkoden, h(k), utgör grunden för hashfunktionen. Normalt är f(k)=h(k)%n (där % beräknar divisionsresten och n är arrayens storlek) Hashtabeller är mycket vanliga och därför är hashcode() en metod i Javas Object, d.v.s. man uppmuntras att implementera detta för alla klasser. Att skriva bra hashcode()-implementeringar är utmanande, viktigt för hashtabellers prestandaoch fortfarande ett aktivt forskningsområde. Hashkoden bör ha god spridning (alla hashkoder bör förekomma lika ofta). Små skillnader i nyckeln bör ge förändrad hashkod. (Hashkoden för strängar bör alltså inte vara de fyra första tecknen omvandlade till en int32.) Detta för att få en god spridning av data i hashtabellen och undvika hopklumpning.

Exempel på hashkod En grundmetod för att beräkna hashkod används i java för strängar. 31 +," c. + 31 +,$ c " + + 31 " c +,$ + 31. c +," där c. c +," är ascii-koden för tecknen i strängen. En term för varje del i nyckeltypen. Varje tal multipliceras med en potens av ett primtal.

Kollisioner Det kan förstås hända att två olika nycklar, k1 och k2, sätts in i en tabell för vilka f(k1)=f(k2) Dessa skaalltså lagras påsamma index så detuppstår en kollision. Kollisioner hanteras på olika sätt. De två standardsätten är open addressing och chaining (closed addressing).

Open addressing, insättning När kollision uppstårförsöker man lagra nyckel-värde-paretpå ett annat index, oftast relativt ursprungsindexet. Man söker igenom en sekvens av index enligt ett givet mönster tills man finneren ledig plats. Ett sekvensmönster är linjär sökning (linear probing). Man söker då helt enkelt på nästkommande index i varje steg. Når man slutet av arrayen så fortsätter man i början. [0] [1] [2] k3 v3 [3] k1 v1 [4] k2 v2 [5] sätt in (k5,v5) f(k5)=3 [6] k4 v4

Open addressing, uppslagning slå upp k4, f(k4)=2 Om nyckeln på det index som hashfunktionenger inte innehåller samma nyckel, leta på nästa plats i sekvensen. Fortsätt jämföra med nyckeln på varje plats i sekvensen tills antingen nyckeln hittas eller platsen är tom. Om man når en tom plats såfinnsinte nyckeln i tabellen. [0] [1] k2 v2 [2] k1 v1 [3] k4 v4 [4] [5] k3 v3 [6] slå upp k5, f(k5)=5

tag bort k1, f(k1)=3 Open addressing, borttagning [0] När man ska ta bort ett nyckel-värde-par letar man upp det som vid sökning. Man kan inte bara ta bort paret utan måste markera att platsenhar varit upptagen. Detta för att framtida sökningar inte ska ge upp i förtid. [1] [2] k3 v3 [3] k1 v1 [4] k2 v2 [5] [6] k4 v4 [0] [1] [2] k3 v3 [3] * * [4] k2 v2 [5] [6] k4 v4 slå upp k2, f(k2)=2

Open addressing, kvadratisk sökning Linjär sökning har en tendens att bilda kluster där operationer tar lång tid (på grund av långa söksekvenser). Andra sekvenser förbättrar detta, t.ex. kvadratisk sökning (quadratic probing) där man söker på plats i+1, i+4, i+9, i+16 etc.

Chaining Vid chaining har varje element i arrayen en länkad lista innehållande nyckel-värde-par. På så vis kan alla par vars nyckel har samma index lagras på sin rätta plats. Vid sökning måste man traversera hela länkade listan tills man hittar nyckeln eller man når slutet. [0] [1] [2] [3] [4] [5] [6] k8 va k1 vb k3 vc k20 vd k13 ve

Rehashing När antalet nyckel-värde-par närmar sig arrayens kapacitet blir den genomsnittsliga tiden för operationer längre och längre. Detta p.g.a. detökadeantalet kollisioner. Man behöver då allokera en ny, större array. Detta kallas rehashing för när man fyller den nya arrayen räknas indexen för varje nyckel om. Denna är ju h(k)%n där n ändrat sig. Nyckel-värde-paren fördelar sig jämnt över den nya arrayen och kollisionerna blirfärre.

Prestenda Genomsnittsliga antalet jämförelser, c, för en operation vid open addressing är c = 1 2 1 + 1 1 L där L är lasten, d.v.s. antalet nyckel-värde-par dividerat med arrayens kapacitet. För chaining är sambandet c = 1 + L 2

Prestandajämförelse L open addressing chaining 0 1 1 0,5 1,5 1,25 0,75 2,5 1,38 0,9 5,5 1,45 0,95 10,5 1,48

Nackdelar med hashtabell Så länge lasten hålls under ett visst värde så är förväntade tiden för operationer O(1). Varför kan man föredra balanserade sökträd som tar O(log n)? Hashtabeller behöverrehashas. Detta tar mycket tid då ochdå. Enda garanterade värstafallskomplexiteten är O(n) för varje enskild operation. I binära sökträd kan man snabbt traversera elementen i sorteringsordning.