... HASHING. Hashing. Hashtabeller. hash(x)

Like dokumenter
INF1020 Algoritmer og datastrukturer

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

INF Algoritmer og datastrukturer

Hashing. INF Algoritmer og datastrukturer HASHING. Hashtabeller

INF2220: Forelesning 3

INF2220: Forelesning 3. Map og hashing Abstrakte datatyper (kapittel 3.1) Map (kapittel 4.8) Hashing (kapittel 5)

INF2220: Forelesning 3

public interface Collec>on<V> { public void add(v value); public default V remove(v value) { return null;

Hashing: Håndtering av kollisjoner

INF1010 Hashing. Marit Nybakken 8. mars 2004

Hashtabeller. Lars Vidar Magnusson Kapittel 11 Direkte adressering Hashtabeller Chaining Åpen-adressering

Hashfunksjoner. Hashfunksjonen beregner en indeks i hashtabellen basert på nøkkelverdien som vi søker etter

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing. Børge Rødsjø

O(log n) - søk. Søking i et balansert søketre med n elementer er alltid O(log n) Søkingen er basert på parvise sammenligninger av to og to verdier

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing

Kapittel 14, Hashing. Tema. Definere hashing Studere ulike hashfunksjoner Studere kollisjonsproblemet 17-1

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

O(1) søking? Søking i sortert array og i søketrær: Optimalt søk som er O(1):

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

EKSAMENSOPPGAVE. INF-1101 Datastrukturer og algoritmer. Adm.bygget, rom K1.04 og B154 Ingen

Øvingsforelesning 2 - TDT4120. Grafer og hashing. Benjamin Bjørnseth

Søkeproblemet. Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke?

Algoritmer og Datastrukturer IAI 21899

Datastrukturer. Algoritmer og datastrukturer. Øvingsforelesning 2

Datastrukturer for rask søking

Notater til INF2220 Eksamen

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

PG4200 Algoritmer og datastrukturer Forelesning 9

Datastrukturer. Stakker (Stacks) Hva er en datastruktur? Fordeler / Ulemper. Generelt om Datastrukturer. Stakker (Stacks) Elementære Datastrukturer

Søking i strenger. Prefiks-søking Naiv algoritme Knuth-Morris-Pratt-algoritmen Suffiks-søking Boyer-Moore-algoritmen Hash-basert Karp-Rabin-algoritmen

Generelle Tips. INF Algoritmer og datastrukturer. Åpen og Lukket Hashing. Hashfunksjoner. Du blir bedømt etter hva du viser at du kan

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006

Liste som abstrakt konsept/datatype

INF2220: Forelesning 2

INF Algoritmer og datastrukturer

Obligatorisk oppgave 1 INF1020 h2005

Turingmaskiner.

UNIVERSITETET I OSLO

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

Grunnleggende Datastrukturer

EKSAMEN. Emne: Algoritmer og datastrukturer

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

Uke 5 Disjunkte mengder

Algoritmeanalyse. (og litt om datastrukturer)

Tillatte hjelpemidler: alle skrevne og trykte. Antall sider: 2 (+ 1 side vedlegg, bakerst). Oppgave 1 [25%]

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

INF Uke 10. Ukesoppgaver oktober 2012

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

Pensum: fra boken (H-03)+ forelesninger

Fra Kap.10 Binære søketre (BS-tre) Sist oppdatert Definere en abstrakt datastruktur binært søketre. Vise hvordan binær søketre kan brukes

Dagens plan: INF Algoritmer og datastrukturer. Eksempel. Binære Relasjoner

INF2810: Funksjonell Programmering. Mer om verditilordning og muterbare data.

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

INF1020 Algoritmer og datastrukturer GRAFER

INF Algoritmer og datastrukturer

Løsningsforslag EKSAMEN

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

Pensum: fra boken (H-03)+ forelesninger

INF2810: Funksjonell Programmering. Mer om verditilordning og muterbare data.

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

INF1000: Forelesning 4. Mer om arrayer Metoder

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag E K S A M E N. EKSAMENSDATO: 12. desember 1995 TID:

AlgDat 12. Forelesning 2. Gunnar Misund

INF2220: Forelesning 2

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Python: Rekursjon (og programmering av algoritmer) Python-bok: Kapittel 12 + teoribok om Algoritmer

UNIVERSITETET I OSLO

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

INF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7)

Norges Informasjonsteknologiske Høgskole

Innhold. Innledning 1

Parallelle og distribuerte databaser del III

SIF8010 ALGORITMER OG DATASTRUKTURER

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

Euklids algoritmen. p t 2. 2 p t n og b = p s 1. p min(t 2,s 2 )

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Ordliste. Obligatorisk oppgave 1 - Inf 1020

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Programmeringsspråket C

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

INF Algoritmer og datastrukturer

Løsningsforslag til eksamen i PG4200 Algoritmer og datastrukturer 10. desember 2014

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

INF1010 notat: Binærsøking og quicksort

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case. Terje Rydland - IDI/NTNU. Lære å lage større og sammensatte programmer

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

Algoritmer - definisjon

Eksamen iin115 og IN110, 15. mai 1997 Side 2 Oppgave 1 Trær 55 % Vi skal i denne oppgaven se på en form for søkestrukturer som er spesielt godt egnet

Obligatorisk oppgave 4 i INF1010, våren 2014: "Leger og resepter" Versjon 1.1

UNIVERSITETET I OSLO

Inf 1020 Algoritmer og datastrukturer

Transkript:

HASHING Hashing Hashtabeller (kapittel.) Hash-funksjoner (kapittel.) Kollisjonshåndtering Åpen hashing (kapittel.) Lukket hashing (kapittel.) Anta at en bilforhandler har ulike modeller han ønsker å lagre data om. Hvis hver modell har et entydig nummer mellom og kan vi enkelt lagre dataene i en array som er lang. Hva hvis numrene ligger mellom og? Array som er lang: sløsing med plass! Array som er lang: søking tar lineær tid... Ark av Forelesning.. Forelesning.. Ark av Hashtabeller En hashtabell tilbyr innsetting, sletting og søking med konstant gjennomsnittstid. Men: operasjoner som finnminste og skrivsortert har ingen garantier. Brukes gjerne når vi først og fremst ønsker et raskt svar på om et gitt element finnes i datastrukturen eller ikke. Eksempler: kompilatorer (Er variabel y deklarert?) stavekontroller (Finnes ord x i ordlisten?) spill (Har jeg allerede vurdert denne stillingen via en annen trekkrekkefølge?) Ideen i hashing er å lagre elementene i en array (hashtabell), og la verdien til elementet x (eller en del av x, kalt nøkkelen til x) bestemme plasseringen (indeksen) til x i hashtabellen. x hash(x)... Egenskaper til en god hash-funksjon: Rask å beregne Kan gi alle mulige verdier fra til tablesize. Gir en god fordeling utover tabellindeksene. Forelesning.. Ark av Forelesning.. Ark av

Det teoretiske ideal Hashing er en teknikk, hashtabell er en abstrakt datatype (ADT). Klassen java.util.hashtable: Implementerer en hashtabell som mapper nøkler til verdier. Bruker åpen hashing - ved kollisjon lagres det i en bøtte (som må søkes sekvensielt.) Default load-faktor. Load-faktoren uttrykker et tradeoff tid/plass. Perfekt situasjon: n elementer tabell med n plasser hash-funksjon slik at den er lett (rask) å beregne forskjellige nøkkelverdier gir forskjellige indekser Eksempel: Hvis modellene er nummerert,,,...,, kan data om modell i lagres på indeks i/ i en tabell som er stor. Problem: Hva hvis modell får nytt nummer? Forelesning.. Ark av Forelesning.. Ark av Den praktiske virkelighet I praksis: Ønsker i hvert fall at hash-funksjonen skal gi en så jevn fordeling som mulig. Temaer Hvordan velge hash-funksjon? ofte er nøklene strenger Hvordan håndtere kollisjoner? Hvor stor bør hashtabellen være? Hash-funksjoner For heltall: key mod tablesize Gir jevn fordeling for tilfeldige tall. Pass på at ikke nøklene har spesielle egenskaper: Hvis tablesize = og alle nøklene slutter på vil alle elementene havne på samme indeks! Huskeregel: La alltid tabellstørrelsen være et primtall. Forelesning.. Ark av Forelesning.. Ark av

Strenger som nøkler Vanlig strategi: ta utgangspunkt i ascii/unicode-verdiene til hver bokstav og gjør noe lurt. Funksjon Summer verdiene til hver bokstav. public static int hash(string key, int tablesize) { int hashval = ; for (int i = ; i < key.length(); i++) { hashval += key.charat(i); return (hashval % tablesize); Fordel: Enkel å implementere og beregne. Funksjon Bruk bare de tre første bokstavene og vekt disse. public static int hash(string key, int tablesize) { return (key.charat() + * key.charat() + * key.charat()) % tablesize; Fordel: Grei fordeling for tilfeldige strenger. Ulempe: Vanlig språk er ikke tilfeldig! Ulempe: Dårlig fordeling hvis tabellstørrelsen er stor. Forelesning.. Ark av Forelesning.. Ark av Funksjon keysize i= key[keysize i ] i public static int hash(string key, int tablesize) { int hashval = ; for (int i = ; i < key.length(); i++) { hashval = * hashval + key.charat(i); hashval = hashval % tablesize; if (hashval < ) { hashval += tablesize; return hashval; Fordel: Enkel og relativt rask å beregne. Stort sett bra nok fordeling. Hash-funksjoner: oppsummering Må (i hvert fall teoretisk) kunne gi alle mulige verdier fra til tablesize. Må gi en god fordeling utover tabellindeksene. Tenk på hva slags data som skal brukes til nøkler. Fødselsår kan gi god fordeling i persondatabaser, men ikke for en skoleklasse! Ulempe: Beregningen tar lang tid for lange nøkler. Forelesning.. Ark av Forelesning.. Ark av

Eksempel: Ideell situasjon Input:,,,,,,,,, Hash-funksjon: hash(x, tablesize) = x Kollisjonshåndtering Hva gjør vi hvis to elementer hashes til den samme indeksen? Åpen hashing: Elementer med samme hashverdi samles i en liste (eller annen passende struktur). Lukket hashing: Dersom en indeks er opptatt, prøver vi en annen indeks inntil vi finner en som er ledig. Det finnes flere strategier for å velge hvilken annen indeks vi skal prøve. Hva hvis hash-funksjonen hadde vært istedenfor? Forelesning.. Ark av Forelesning.. Ark av Åpen hashing ( Separate chaining ) Vi forventer at hash-funksjonen er god, slik at alle listene blir korte. Vi definerer load-faktoren, λ, til en hashtabell til å være antall elementer i tabellen i forhold til tabellstørrelsen. For åpen hashing ønsker vi λ.. Lukket hashing åpen adressering Prøver alternative indekser h (x), h (x), h (x),... inntil vi finner en som er ledig. h i er gitt ved: h i (x) = (hash(x) + f(i)) mod tablesize og slik at f() =. Merk at vi trenger en større tabell enn for åpen hashing generelt ønsker vi her λ <.. Skal se på tre mulige strategier (valg av f): Lineær prøving Kvadratisk prøving Dobbel hashing Forelesning.. Ark av Forelesning.. Ark av

Lineær prøving Velger f til å være en lineær funksjon av i, typisk f(i) = i. Input:,,,, Hash-funksjon: Kvadratisk prøving Velger f til å være en kvadratisk funksjon av i, typisk f(i) = i. Input:,,,, Hash-funksjon: Forelesning.. Ark av Forelesning.. Ark av Dobbel hashing Bruker en ny hash-funksjon for å løse kollisjonene, typisk f(i) = i hash (x), med hash (x) = R (x mod R) hvor R er et primtall mindre enn tablesize. Input:,,,, Andre hash-funksjon: hash (x) = (x mod ) Rehashing Hvis tabellen blir for full, begynner operasjonene å ta veldig lang tid. Mulig løsning: Lag en ny hashtabell som er omtrent dobbelt så stor (men fortsatt primtall!). Gå gjennom hvert element i den opprinnelige tabellen, beregn den nye hash-verdien og sett inn på rett plass i den nye hashtabellen. Dette er en dyr operasjon, O(n), men opptrer relativt sjelden (må ha hatt n/ innsettinger siden forrige rehashing). Forelesning.. Ark av Forelesning.. Ark av