INF1020 Algoritmer og datastrukturer

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

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

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

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

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

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

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

Algoritmer og Datastrukturer IAI 21899

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

EKSAMEN. Dato: 28. mai 2018 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):

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

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

Notater til INF2220 Eksamen

Datastrukturer. Algoritmer og datastrukturer. Øvingsforelesning 2

INF Algoritmer og datastrukturer

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

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

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

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

Pensum: fra boken (H-03)+ forelesninger

INF2220: Forelesning 2

Turingmaskiner.

INF Algoritmer og datastrukturer

Datastrukturer for rask søking

Pensum: fra boken (H-03)+ forelesninger

UNIVERSITETET I OSLO

PG4200 Algoritmer og datastrukturer Forelesning 9

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

Liste som abstrakt konsept/datatype

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

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

7) Radix-sortering sekvensielt kode og effekten av cache

Obligatorisk oppgave 1 INF1020 h2005

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

Høgskoleni østfold EKSAMEN. 4 dobbeltsidige ark med notater Lars Magnusson

Sortering i Lineær Tid

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

deeegimnoorrrsstt Sjette forelesning

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

Heapsort. Lars Vidar Magnusson Kapittel 6 Heaps Heapsort Prioritetskøer

Algoritmer og Datastrukturer

EKSAMEN. Emne: Algoritmer og datastrukturer

Øvingsforelesning 4. Martin Aasen

Hvorfor sortering og søking? Søking og sortering. Binære søketrær. Ordnet innsetting forbereder for mer effektiv søking og sortering INF1010 INF1010

INF Algoritmer og datastrukturer

Algoritmeanalyse. (og litt om datastrukturer)

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

INF1010 notat: Binærsøking og quicksort

EKSAMENSOPPGAVE. IAI20102 Algoritmer og datastrukturer

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Øvingsforelesning 6. Sorteringsalgoritmer. Kristian Veøy

IN Algoritmer og datastrukturer

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

Uke 5 Disjunkte mengder

n/b log b n = (lg n) a log b n = n log b a

UNIVERSITETET. Indeksering. Konvensjonelle indekser B-trær og hashing Flerdimensjonale indekser Hashliknende strukturer.

Grunnleggende Datastrukturer

INF2220: Time 12 - Sortering

Algoritmer - definisjon

INF Algoritmer og datastrukturer

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

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

SIF8010 ALGORITMER OG DATASTRUKTURER

Løsningsforslag EKSAMEN

INF Uke 10. Ukesoppgaver oktober 2012

Rekursiv programmering

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

Innhold. Innledning 1

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

Øvingsforelesning 6. Sorteringsalgoritmer. Martin Kirkholt Melhus Basert på foiler av Kristian Veøy 30/09/14 1

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

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

UNIVERSITETET I OSLO

Rekursjon. Binærsøk. Hanois tårn.

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

INF Algoritmer og datastrukturer

LO118D Forelesning 4 (DM)

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

Ordliste. Obligatorisk oppgave 1 - Inf 1020

Dagens plan. INF Algoritmer og datastrukturer. Koding av tegn. Huffman-koding

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

INF Algoritmer og datastrukturer

Dagens tema. Perl: Mer om regulære uttrykk Filer Lister og tabeller Kompilering og interpretering (kapittel ) IN 211 Programmeringsspråk

Studentnummer: Side 1 av 1. Løsningsforslag, Eksamen i TDT4120 Algoritmer og datastrukturer August 2005

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

Norges Informasjonsteknologiske Høgskole

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

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

Transkript:

Dagens plan Hashing Hashtabeller Hash-funksjoner Kollisjonshåndtering Åpen hashing (kap. 5.3) Lukket hashing (kap. 5.4) Rehashing (kap. 5.5) Sortering ut fra en hashing-ide (side 66-68) Bøttesortering Radix-sortering Ark 1 av 21 Forelesning 30.8.2004

HASHING Anta at en bilforhandler har 50 ulike modeller han ønsker å lagre data om. Hvis hver modell har et entydig nummer mellom 0 og 49 kan vi enkelt lagre dataene i en array som er 50 lang. Hva hvis numrene ligger mellom 0 og 49 999? Array som er 50 000 lang: sløsing med plass! Array som er 50 lang: søking tar lineær tid... Forelesning 30.8.2004 Ark 2 av 21

Hashtabeller ADTen 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 ordlista?) spill (Har jeg allerede vurdert denne stillingen via en annen trekkrekkefølge?) Forelesning 30.8.2004 Ark 3 av 21

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) 0 1 2 3... Egenskaper til en god hash-funksjon: Rask å beregne Kan gi alle mulige verdier fra 0 til tablesize 1. Gir en god fordeling utover tabellindeksene. Forelesning 30.8.2004 Ark 4 av 21

Det teoretiske ideal Vi kan tenke oss følgende perfekte 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 0, 1 000, 2 000,..., 48 000, 49 000 kan data om modell i lagres på indeks i/1 000 i en tabell som er 50 stor. Problem Hva hvis modell 4 000 får nytt nummer 3 999? Forelesning 30.8.2004 Ark 5 av 21

Den praktiske virkelighet Vanligvis vil vi ikke finne noen perfekt hashfunksjon. Men vi ønsker 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? størrelsen er en del av ADTen! Forelesning 30.8.2004 Ark 6 av 21

Hash-funksjoner For heltall: key mod tablesize Gir jevn fordeling for tilfeldige tall. Pass på at ikke nøklene har spesielle egenskaper: Hvis tablesize = 10, og alle nøklene slutter på 0, vil alle elementene havne på samme indeks! Huskeregel: La alltid tabellstørrelsen være et primtall. Forelesning 30.8.2004 Ark 7 av 21

Strenger som nøkler Vanlig strategi: ta utgangspunkt i ascii/unicode-verdiene til hver bokstav og gjør noe lurt. Funksjon 1 Summer verdiene til hver bokstav. public static int hash1(string key, int tablesize) { int hashval = 0; for (int i = 0; i < key.length(); i++) { hashval += key.charat(i); } } return (hashval % tablesize); Fordel: Enkel å implementere og beregne. Ulempe: Dårlig fordeling hvis tabellstørrelsen er stor. Forelesning 30.8.2004 Ark 8 av 21

Funksjon 2 Bruk bare de tre første bokstavene og vekt disse. public static int hash2(string key, int tablesize) { } return (key.charat(0) + 27 * key.charat(1) + 729 * key.charat(2)) % tablesize; Fordel: Grei fordeling for tilfeldige strenger. Ulempe: Vanlig språk er ikke tilfeldig! Forelesning 30.8.2004 Ark 9 av 21

Funksjon 3 keysize 1 i=0 key[keysize i 1] 37 i public static int hash3(string key, int tablesize) { int hashval = 0; for (int i = 0; i < key.length(); i++) { hashval = 37 * hashval + key.charat(i); } } hashval = hashval % tablesize; if (hashval < 0) { hashval += tablesize; return hashval; Fordel: Enkel og relativt rask å beregne. Stort sett bra nok fordeling. Ulempe: Beregningen tar lang tid for lange nøkler. Forelesning 30.8.2004 Ark 10 av 21

Et instruktivt eksempel Input: 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 Hash-funksjon: hash(x, tablesize) = x 0 1 2 3 4 5 6 7 8 9 0 1 4 9 16 25 36 49 64 81 0 1 2 3 4 5 6 7 8 9 Hva hvis hash-funksjonen hadde vært hash(x, tablesize) =xmodtablesize istedenfor? Forelesning 30.8.2004 Ark 11 av 21

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. Forelesning 30.8.2004 Ark 12 av 21

Åpen hashing ( Separate chaining ) 0 1 2 3 4 5 6 7 8 9 0 81 1 64 4 25 36 16 49 9 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 λ 1.0. Forelesning 30.8.2004 Ark 13 av 21

Lukket hashing åpen adressering Prøver alternative indekser h 0 (x), h 1 (x), h 2 (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 (0) =0. Merk at vi trenger en større tabell enn for åpen hashing generelt ønsker vi her λ < 0.5. Skal se på tre mulige strategier (valg av f ): Lineær prøving Kvadratisk prøving Dobbel hashing Forelesning 30.8.2004 Ark 14 av 21

Lineær prøving Velger f til å være en lineær funksjon av i, typisk f (i) =i. Input: 89, 18, 49, 58, 69 Hash-funksjon: hash(x, tablesize) =xmodtablesize 0 1 2 3 4 5 6 7 8 9 Forelesning 30.8.2004 Ark 15 av 21

Kvadratisk prøving Velger f til å være en kvadratisk funksjon av i, typisk f (i) =i 2. Input: 89, 18, 49, 58, 69 Hash-funksjon: hash(x, tablesize) =xmodtablesize 0 1 2 3 4 5 6 7 8 9 Forelesning 30.8.2004 Ark 16 av 21

Dobbel hashing Bruker en ny hash-funksjon for å løse kollisjonene, typisk f (i) =i hash 2 (x), med hash 2 (x) =R (xmodr)hvor R er et primtall mindre enn tablesize. Input: 89, 18, 49, 58, 69 Andre hash-funksjon: hash 2 (x) =7 (xmod7) 0 1 2 3 4 5 6 7 8 9 Forelesning 30.8.2004 Ark 17 av 21

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/2 innsettinger siden forrige rehashing). Forelesning 30.8.2004 Ark 18 av 21

Hash-funksjoner: oppsummering Må (i hvert fall teoretisk) kunne gi alle mulige verdier fra 0 til tablesize 1. 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! Forelesning 30.8.2004 Ark 19 av 21

Radix-sortering Bøtte-sortering Hvis vi har N heltall fra 0 til M-1 kan disse sorteres som følger: 1. Opprett en heltallsarray antall[m], initialisert til 0. 2. For hver A i i input, øk antall[a i ]med en. 3. Etter at all inputen er lest, gå gjennom arrayen og skriv ut en representasjon av den sorterte listen. Denne algoritmen tar O(M + N) tid. Hvis M og N er omtrent like store, blir bøttesortering O(N). Generalisering: Radix-sortering Forelesning 30.8.2004 Ark 20 av 21

Eksempel: 10 heltall i intervallet 0 til 999. 64, 8, 216, 512, 27, 729, 0, 1, 343, 125 Ide: Sorter etter minst signifikante siffer, deretter det nest minste signifikante siffer og så videre. 0 1 2 3 4 5 6 7 8 9 Forelesning 30.8.2004 Ark 21 av 21