Merging og Hashing (del I)

Relaterede dokumenter
Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer.

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (key, nøgle) for dataelementer.

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Datastrukturer (recap)

Datastrukturer (recap) Datastruktur = data + operationer herpå

Datastrukturer (recap)

Sortering af information er en fundamental og central opgave.

Sortering af information er en fundamental og central opgave.

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

Eksamen i softwareudvikling

Danmarks Tekniske Universitet

Hashing. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Philip Bille

Hashing. Hashing. Ordbøger. Ordbøger. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Ordbøger Hægtet hashing Hashfunktioner Lineær probering

Hashing. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Philip Bille

Hashing og hashtabeller

DM507 Algoritmer og datastrukturer

Mm8: Hash tables, Hashing and binary search trees - November 7, 2008

Danmarks Tekniske Universitet

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 2 2 n 1/n (logn) n. n 2

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse.

DM507 Algoritmer og datastrukturer

Danmarks Tekniske Universitet

Datastrukturer. Datastruktur = data + operationer herpå

Danmarks Tekniske Universitet

1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer

Danmarks Tekniske Universitet

Hashing og hashtabeller

Opgave 1 (10%) I det følgende angiver log n 2-tals-logaritmen af n. Ja Nej. n+3n er O(2n)? n 6 er O(n 5 )? nlogn er O(n 2 /logn)? 4n 3 er O(3n 4 )?

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

Databaser Obligatorisk opgave 2 Vejledende løsning

Datastrukturer. Datastruktur = data + operationer herpå

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO) Mm8: Hash tables og Hashing - November 10, 2010

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Abstrakte datatyper C#-version

Danmarks Tekniske Universitet

R E D C A P M A N U A L. Importér data til REDCap fra CSV-fil. Opbyg din eksisterende database i REDCap Version 1.0

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 7 n 1/ log n. (log n) 4

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n+logn logn (logn) 7 (3/2) n

Danmarks Tekniske Universitet

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Grundlæggende Algoritmer og Datastrukturer. Hashing [CLRS, kapitel ]

Database Implementering

Analyse af ombytningspuslespil

CPUer og maskinkode DM534. Rolf Fagerberg

Danmarks Tekniske Universitet

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jimmy Jessen Nielsen (JJE) Mm3: More about recurrences - October 10, 2008

Analyse af ombytningspuslespil

Danmarks Tekniske Universitet

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 3/2. n logn (3/2) n. 2 3logn (3/2) n

Take-home Eksamen. DM505 Design og programmering af databaser. Syddansk Universitet Institut for Matematik og Datalogi

DM507 Algoritmer og datastrukturer

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 7 n 1/2 2 n /n 3 2logn n 2 /logn

Bemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse.

Mm7: A little bit more about sorting - and more times for exercises - November 4, 2008

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Hashing. Hashing. Ordbøger. Ordbøger. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Ordbøger Hægtet hashing Hashfunktioner Lineær probering

Rolf Fagerberg. Forår 2013

DM507 - Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET EKSAMEN. Grundkurser i Datalogi. Algoritmer og Datastrukturer 1 (2003-ordning)

iseries Client Access Express Kom godt i gang

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Danmarks Tekniske Universitet

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel:

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 5. 5n 2 5 logn. 2 logn

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen (bemærk at log n betegner totals logaritmen): n 2 (log n) 2 2.

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

Københavns Universitet, Det naturvidenskabelige Fakultet. Afleveringsopgave 1

Introduktion til OPC Access

På nedenstående billede skal du finde den figur som optræder nøjagtig 3 gange.

Introduktion til datastrukturer

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Grådige algoritmer. Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Projektopgave. Byg et netværk til gruppens nye firma!

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n n (log n) 2. n 2 + log n 3 n. n n (log n)

Gerth Stølting Brodal. Hashing [CLRS, kapitel ]

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Science and Technology EKSAMEN. Grundkurser i Datalogi. Algoritmer og Datastrukturer 1 (2003-ordning)

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jimmy Jessen Nielsen (JJE) Mm2: Rekursive algoritmer og rekurrens - October 10, 2008

\ \ Computerens Anatomi / /

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Transkript:

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 (API = Application Programming Interface: samling af metoder).

API for sekventiel tilgang (API = Application Programming Interface: samling af metoder). Læsning: Operationer: readnext(), isendoffile(), open(), close()

API for sekventiel tilgang (API = Application Programming Interface: samling af metoder). Læsning: Operationer: readnext(), isendoffile(), open(), close()

API for sekventiel tilgang (API = Application Programming Interface: samling af metoder). Læsning: Operationer: readnext(), isendoffile(), open(), close()

API for sekventiel tilgang (API = Application Programming Interface: samling af metoder). Læsning: Operationer: readnext(), isendoffile(), open(), close()...

API for sekventiel tilgang (API = Application Programming Interface: samling af metoder). Læsning: Operationer: readnext(), isendoffile(), open(), close()

API for sekventiel tilgang (API = Application Programming Interface: samling af metoder). Læsning: Operationer: readnext(), isendoffile(), open(), close()

API for sekventiel tilgang (API = Application Programming Interface: samling af metoder). Læsning: Operationer: readnext(), isendoffile(), open(), close() Skrivning: Operationer: writenext(), open(), close()

API for sekventiel tilgang (API = Application Programming Interface: samling af metoder). Læsning: Operationer: readnext(), isendoffile(), open(), close() Skrivning: Operationer: writenext(), open(), close()

API for sekventiel tilgang (API = Application Programming Interface: samling af metoder). Læsning: Operationer: readnext(), isendoffile(), open(), close() Skrivning: Operationer: writenext(), open(), close()

API for sekventiel tilgang (API = Application Programming Interface: samling af metoder). Læsning: Operationer: readnext(), isendoffile(), open(), close() Skrivning: Operationer: writenext(), open(), close()

API for sekventiel tilgang (API = Application Programming Interface: samling af metoder). Læsning: Operationer: readnext(), isendoffile(), open(), close() Skrivning: Operationer: writenext(), open(), close()

API for sekventiel tilgang (API = Application Programming Interface: samling af metoder). Læsning: Operationer: readnext(), isendoffile(), open(), close() Skrivning: Operationer: writenext(), open(), close()

API for random access tilgang Tilgang via ID (også kaldet key, nøgle) for elementer.

API for random access tilgang Tilgang via ID (også kaldet key, nøgle) for elementer. Operationer: findelm(id), insertelm(id,elementdata), deleteelm(id), open(), close()

API for random access tilgang Tilgang via ID (også kaldet key, nøgle) for elementer. Operationer: findelm(id), insertelm(id,elementdata), deleteelm(id), open(), close() ID element data stored elements

API for random access tilgang Tilgang via ID (også kaldet key, nøgle) for elementer. Operationer: findelm(id), insertelm(id,elementdata), deleteelm(id), open(), close() ID element data stored elements Jvf.:

API for random access tilgang Tilgang via ID (også kaldet key, nøgle) for elementer. Operationer: findelm(id), insertelm(id,elementdata), deleteelm(id), open(), close() ID element data stored elements Jvf.: Dictionary i Python (data = dict[id], dict[id] = data, del dict[id])

API for random access tilgang Tilgang via ID (også kaldet key, nøgle) for elementer. Operationer: findelm(id), insertelm(id,elementdata), deleteelm(id), open(), close() ID element data stored elements Jvf.: Dictionary i Python (data = dict[id], dict[id] = data, del dict[id]) Databases (ID = CPR, f.eks.)

API for random access tilgang Tilgang via ID (også kaldet key, nøgle) for elementer. Operationer: findelm(id), insertelm(id,elementdata), deleteelm(id), open(), close() ID element data stored elements Jvf.: Dictionary i Python (data = dict[id], dict[id] = data, del dict[id]) Databases (ID = CPR, f.eks.) NB: tilgang til liste i Python/arrays i Java kan ses som specialtilfælde hvor ID = index (data = list[7], list[7] = data, list[7] = None)

Spørgsmål 1. Hvad kan det simple API Sekventiel tilgang bruges til?

Spørgsmål 1. Hvad kan det simple API Sekventiel tilgang bruges til? 2. Hvordan implementeres det mere avancerede API Random access tilgang?

Spørgsmål 1. Hvad kan det simple API Sekventiel tilgang bruges til? 2. Hvordan implementeres det mere avancerede API Random access tilgang? Bemærk: Alle data kilder kan tilgås med Sekventiel tilgang API (og nogle tillader kun det): Harddisk CD Bånd Streaming over net Data genereret on-the-fly af et andet program Data i et array (liste i Python)

Spørgsmål 1. Hvad kan det simple API Sekventiel tilgang bruges til? 2. Hvordan implementeres det mere avancerede API Random access tilgang? Bemærk: Alle data kilder kan tilgås med Sekventiel tilgang API (og nogle tillader kun det): Harddisk CD Bånd Streaming over net Data genereret on-the-fly af et andet program Data i et array (liste i Python) Denne gang: spørgsmål 2. Næste gang: spørgsmål 1.

Hvordan laves API Random access tilgang? Een metode: Hashing.

Hvordan laves API Random access tilgang? Een metode: Hashing.?

Hvordan laves API Random access tilgang? Een metode: Hashing.? Hash hacher [fransk] hakke i stykker.

Hashing Ide: tildel hver ID et index i et array A hvor element gemmes. Hash-funktion h:

Hashing Ide: tildel hver ID et index i et array A hvor element gemmes. Hash-funktion h: h(id) = index i A h(id) k 1. 4 3 2 1 0

Hashing Ide: tildel hver ID et index i et array A hvor element gemmes. Hash-funktion h: h(id) = index i A Eksempel (antag ID er er heltal): h(id) k 1. 4 3 2 1 0 hvor k = A. h(x) = x mod k Bemærk at h(x) {0, 1, 2,..., k 1}, så det er altid et lovligt index.

Hashing Ide: tildel hver ID et index i et array A hvor element gemmes. Hash-funktion h: h(id) = index i A Eksempel (antag ID er er heltal): h(id) k 1. 4 3 2 1 0 hvor k = A. h(x) = x mod k Bemærk at h(x) {0, 1, 2,..., k 1}, så det er altid et lovligt index. Med k = 41: h(46) = 5 (da 1 41 + 5 = 46) h(12) = 12 (da 0 41 + 12 = 12) h(100) = 18 (da 2 41 + 18 = 100) h(479869) = 5 (da 11704 41 + 5 = 479869)

Hashing Hvorfor ikke bare h(x) = x?

Hashing Hvorfor ikke bare h(x) = x? Eksempel: gem 5 CPR-numre.

Hashing Hvorfor ikke bare h(x) = x? Eksempel: gem 5 CPR-numre. CPR-nummre: 180781-2345 {0, 1, 2,... 10 10 1} Så størrelse af array A skal være 10 10 for at gemme 5 tal. Spild af plads (10 10 bytes = 4 Gb).

Hashing Hvorfor ikke bare h(x) = x? Eksempel: gem 5 CPR-numre. CPR-nummre: 180781-2345 {0, 1, 2,... 10 10 1} Så størrelse af array A skal være 10 10 for at gemme 5 tal. Spild af plads (10 10 bytes = 4 Gb). Ofte er nøgler heltal (32 eller 64 bits), dvs. har 2 32 10 10 eller 2 64 10 20 muligheder.

Kollisioner h(x) = x mod 41: h(46) = 5 (da 1 41 + 5 = 46) h(12) = 12 (da 0 41 + 12 = 12) h(100) = 18 (da 2 41 + 18 = 100) h(479869) = 5 (da 11704 41 + 5 = 479869)

Kollisioner h(x) = x mod 41: h(46) = 5 (da 1 41 + 5 = 46) h(12) = 12 (da 0 41 + 12 = 12) h(100) = 18 (da 2 41 + 18 = 100) h(479869) = 5 (da 11704 41 + 5 = 479869) h(479869) h(46) k 1. 5 4 3 2 1 0

Een løsning: Chaining Gem alle elementer for en array-celle i en lænket liste.

Een løsning: Chaining Gem alle elementer for en array-celle i en lænket liste. h(479869) h(46) k 1 3 2 1 0 46 data 479869 data

Een løsning: Chaining Gem alle elementer for en array-celle i en lænket liste. h(479869) h(46) k 1 3 2 1 0 46 data 479869 data De listen skal gennemløbes sekventielt, stiger tiden fra Θ(1) til Θ( liste ).

Een løsning: Chaining Gem alle elementer for en array-celle i en lænket liste. h(479869) h(46) k 1 3 2 1 0 46 data 479869 data De listen skal gennemløbes sekventielt, stiger tiden fra Θ(1) til Θ( liste ). Vi vil derfor gerne have få kollisioner.

Kan kollisioner undgås? Afhænger af forholdet mellem hash-funktionen h og det konkrete datasæt som er gemt.

Kan kollisioner undgås? Afhænger af forholdet mellem hash-funktionen h og det konkrete datasæt som er gemt. I værste fald hash er alle n elementer til samme celle. Tid: Θ(n).

Kan kollisioner undgås? Afhænger af forholdet mellem hash-funktionen h og det konkrete datasæt som er gemt. I værste fald hash er alle n elementer til samme celle. Tid: Θ(n). Hvis n (antal elementer gemt) er større end k (array-størrelse), er der mindst een kollision

Kan kollisioner undgås? Afhænger af forholdet mellem hash-funktionen h og det konkrete datasæt som er gemt. I værste fald hash er alle n elementer til samme celle. Tid: Θ(n). Hvis n (antal elementer gemt) er større end k (array-størrelse), er der mindst een kollision (duehulsprincippet).

Kan kollisioner undgås? Afhænger af forholdet mellem hash-funktionen h og det konkrete datasæt som er gemt. I værste fald hash er alle n elementer til samme celle. Tid: Θ(n). Hvis n (antal elementer gemt) er større end k (array-størrelse), er der mindst een kollision (duehulsprincippet). Hvad hvis vi antager h smider tallene ind i celler tilfældigt? (Set over alle mulige datasæt kan man argumentere for at dette svarer til jævnest mulig fordeling.)

Fødselsdagsparadokset Situation: n tilfældige mennesker går ind i et rum. Spørgsmål: Er der nogen der har fødselsdag samme dato i året?

Fødselsdagsparadokset Situation: n tilfældige mennesker går ind i et rum. Spørgsmål: Er der nogen der har fødselsdag samme dato i året? n Sandsynlighed for to med samme fødselsdag 0 0 1 0 2 1/365.?? 365 1

Fødselsdagsparadokset Situation: n tilfældige mennesker går ind i et rum. Spørgsmål: Er der nogen der har fødselsdag samme dato i året? n Sandsynlighed for to med samme fødselsdag 0 0 1 0 2 1/365.?? 365 1 Spørgsmål: for hvilket n bliver sandsynligheden 1/2?

Fødselsdagsparadokset Situation: n tilfældige mennesker går ind i et rum.

Fødselsdagsparadokset Situation: n tilfældige mennesker går ind i et rum. Spørgsmål: for hvilket n bliver sandsynligheden for at der er to med fødselsdag samme dato i året større end 1/2?

Fødselsdagsparadokset Situation: n tilfældige mennesker går ind i et rum. Spørgsmål: for hvilket n bliver sandsynligheden for at der er to med fødselsdag samme dato i året større end 1/2? Gå til socrative.com, room number 240530 A: 0 < n 50 B: 50 < n 100 C: 100 < n 150 D: 150 < n 200 E: 200 < n 365

Fødselsdagsparadokset Bemærk: P(nogen har samme fødseldag) = 1 - P(ingen har samme fødseldag)

Fødselsdagsparadokset Bemærk: P(nogen har samme fødseldag) = 1 - P(ingen har samme fødseldag) Så vi kigger i stedet på P(ingen med samme fødseldag blandt de n første personer), og spørger hvornår den er mindre end 1/2.

Fødselsdagsparadokset Bemærk: P(nogen har samme fødseldag) = 1 - P(ingen har samme fødseldag) Så vi kigger i stedet på P(ingen med samme fødseldag blandt de n første personer), og spørger hvornår den er mindre end 1/2. Ingen med samme fødseldag blandt de n første personer 1) Ingen med samme fødselsedag blandt de n 1 første personer OG 2) den n te persons fødselsdag falder ikke sammen med nogen af disses.

Fødselsdagsparadokset Bemærk: P(nogen har samme fødseldag) = 1 - P(ingen har samme fødseldag) Så vi kigger i stedet på P(ingen med samme fødseldag blandt de n første personer), og spørger hvornår den er mindre end 1/2. Ingen med samme fødseldag blandt de n første personer 1) Ingen med samme fødselsedag blandt de n 1 første personer OG 2) den n te persons fødselsdag falder ikke sammen med nogen af disses. Hvis 1) gælder, er præcis n 1 forskellige datoer optaget når den n te person går ind i rummet. Hvis personerne antages at have tilfældige fødselsdage, er sandsynligheden for 2) derfor (365 (n 1))/365 når 1) gælder.

Fødselsdagsparadokset Hvis vi kalder P(ingen med samme fødseldag blandt de n første personer) for s n, kan vi se af ovenstående at 365 (n 1) s n = s n 1 365 Da s 1 naturligvis er 1 (med kun een person i rummet er der ingen med samme fødselsdag), ser vi at: s 1 = 1 s 2 = 1 364 365 s 3 = 1 364 365 363 365 s 4 = 1 364 365 363 365 362 365.

Fødselsdagsparadokset Hvis man udregner disse udtryk (evt. via at skrive et program, der gør det), ses at s 22 = 0.5243... s 23 = 0.4927... Vi var interesserede i, for hvilket n det var mere sandsynligt at nogen havde samme fødselsdags end at ingen havde. Dvs. (se bemærkning på tidligere side) for hvilket n at s n 1/2 Af beregningen ovenfor kan vi nu svare: når n bliver 23. Af samme slags beregninger fås f.eks. s 50 = 0.0296...

Fødselsdagsparadokset og Hashing At samle personer med tilfældige fødselsdage svarer til at indsætte tilfældigt i en tabel af størrelse 365 (antal dage i et år). Ovenstående metode kan derfor bruges til at beregne sandsynligheden for, at kollisioner opstår ved indsættelse af n elementer i en hashtabel, hvis det antages at hashfunktionen tildeler tabel-indekser til elementer på en tilfældig måde. (Man skal blot udskifte 356 med den aktuelle tabelstørrelse.)