Hashing / Hash tabeller -- Kapitel 20. Hash? Varför en annan datastruktur? Konstant tid för både insert- och find- operationer.

Slides:



Advertisements
Liknande presentationer
Talföljder formler och summor
Advertisements

Kap 1 - Algebra och linjära modeller
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning
1 Listor En sekvens värden av samma typ Nr 5. 2 Listor Sekvens av värden, element Variabelt antal Alla med samma typ Bara första elementet direkt åtkomligt.
2D1311 Programmeringsteknik med PBL
Algoritmer och data strukturer -Länkade listor
Sökning och sortering Linda Mannila
Fortsättningskurs i Programmering lektion 6
De fundamentala datatyperna
1 Ingenjörsmetodik IT & ME 2009 Föreläsare Dr. Gunnar Malm.
Programmeringsteknik Föreläsning 4 Skolan för Datavetenskap och kommunikation.
Binära Sökträd, kapitel 19
Föreläsning 6 Länkade lista Komplexitet Linjärsökning & binärsökning
C-programmering ID120V William Sandqvist Länkad lista
Programmeringsteknik för K och Media
1 Föreläsning 3 Datalogi för E1 / 2D1343 Repetition List List operationer Stränghantering For-slingor.
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 5 Python: argument från kommando-tolken
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Träd och tillämpningar Data Structures & Problem Solving using Java -- Kapitel 19, 12.
Algoritm analys och rekursiva metoder kap 5,7
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 11: Implementation av filsystem.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Föreläsning 11 Arrayer.
Programmering i C# 3. Klasser.
PROCESSPROGRAMMERING
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Vektorer (klassen Vector) Sortering
DATABASHANTERING för programmerare Lektion 3 Mahmud Al Hakim
Programmeringsteknik för Media1 & K1
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Generiska algoritmer Kan användas på containertyper och arrays Använder iteratorer Implementerar.
Funktioner, styrstrukturer, manipulering av matriser
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
1 Programmera med strängar nr 9 Tal till sträng Sträng till tal Grep Sträng till lista av ord.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
Prioritets Köer (Priority Queues ), Graph Data Structures & Problem Solving using Java --Kap 21,14.
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Datastrukturer och algoritmer
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Sökträd, naiva och balancerade lösningar -HashTable -- Kapitel.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 13.
INTRODUKTION TILL PROGRAMMERING
Graph och graph-algoritmer. Några enkla graph teorier Hur IP trafik hittar destinationen i Internät ? GPS-system ? Sociala nätverk. Vanligaste frågeställningar:
Länkade listor Binära träd
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
TILLÄMPAD DATALOGI (TILDA) Övning 4
Övning 5
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
1 Objektorienterad programmering för ingenjörer, VT04 Kort repetition av C-programmering och nyttiga verktyg. Tomas Larsson B439.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 13 Sortering.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 10.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 14.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och Datastrukturer -- Kap 21,14 Prioritets Köer (Priority Queues ), Graph.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14.
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Malmö högskola Rolf Axelsson 2003/2004 DA7235, 4 poäng Fält som returvärde Sortera fält Söka i fält Tvådimensionella fält Fält och spelplan Föreläsning.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Sökning, Symbol tabeller Binära sökträd.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Hash Tabeller och Graf.
Presentationens avskrift:

Hashing / Hash tabeller -- Kapitel 20

Hash? Varför en annan datastruktur? Konstant tid för både insert- och find- operationer

Hash? Insert ”Daniel” =18 Find

Hashfunktioner! Hash functioner använder associerade “key” ( som kan vara data i sig ) för att få fram datan. Hash funktionerna är olika för olika sorts data.  Integers  Images  Strings Etc…

Hashing integers? Tänk 16bit int => 0 – Skapa int[] vec = new int[65536]; Add i => vec[i]++; Sök value j => Is vec[j] > 0? Ta bort value k => vec[k]--; Men för en... Java int : 32bit 44 billion items => impractical!

Exempel av hash funktion D D a a n n i i e e l l ”Daniel” = 589

Men... Hur unik är den?  hashfunc(”Daniel”) → 589  hashfunc(”leinaD”) → 589 Bättre lösning men….!  hashfunc(”TestValue”) →  Wrapp värdet till ett visst intervall Vilken? Arraystorleken…

En bättre hash funktion Ett bättre sätt att beräkna hash värdet Om vi har en text sträng av längd n+1 och alla tecken har index A n, A n-1,...,A 0 gör s = A n X n + A n-1 X n A 0 X 0 = = ((A n )X + A n-1 )X A 0 Använd hashValue = s % array.length

Och då For example: ”Danne” (((’D’)128 + ’a’)128 + ’n’)128 + ’n’)128 + ’e’ = (((68) ) ) ) = hashValue = % array.length om length = 7919 (prim nummer) => hashValue = % 7919 = 2690

Hur löser man kollision? Oavsätt hur unika keys en hash- funktionen tar fram, kollision alltid inträffas. Terminology  Load factor

Lösningar Linear probing ( undersökning ??) Quadratic probing Double hashing Separate chaining

Linear probing Sök fram till näst lediga platsen. hashfunc ( ) X=18X+1,X+2,X+3,X+4,X+5,...

Linear probing Fenomen kallat: Primary clusters

Linear probing Bygger upp kluster  Påverkar exekveringstiden för insert () och find()!

Quadratic probing Försök undvika“primary clusters “ Snabare en linjär Kvadratisk inkrementation av undersökning avståndet X=18X+1 2,X+2 2,X+3 2,X+4 2,X+5 2,...

Quadratic probing  Garantera att hitta fria platser om de finns 1 2 = 12 2 = 43 2 = 9

Double hashing Använder en till hash funktion för att hitta fri plats. X = hash(obj); X2 = hash2(obj); X=18, X2=7X+1*X2,X+2*X2,X+3*X2,X+4*X2,... X=18, X2=718+1*7,18+2*7,17+3*7,18+4*7,...

Double hash probing 1*3= 32*3= 63*3 = 9 Hash2() = 3 Andra hash-funktionene Får inte returnera 0!

Separate chaining Varje hash position har en länkad lista. Påverkar inte andra värde, probing görs bara i listan. Varje element I tabellen är en länkad lista.

Separate chaining H H H H H H H H H H H H H H H H H H Insert

Jämförelse Linear probing  Enkel  Kan resultera i linjär söktid Quadratic probing  Kräver Load factor < 0.5 annars rehashing ??  Kräver prim tal för array storleken Separate chaining  LF < 1  Ingen dubblering, länkade listor är dinamiska !  Kan leda till linjär sökning men I verklighetet ganska kort Double hash probing  Eliminerar kluster

Implementation Quadratic prob.... Object[] list = new Object[size]; // Prime length... int hash(Object o) { int start= Math.abs(o.hashCode() % list.length); int quadNbr = 0; int index = start; while(list[index] != null) { index = start + Math.pow(++quadNbr, 2); } return pos; }