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

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

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

Datastrukturer och algoritmer

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

Magnus Nielsen, IDA, Linköpings universitet

Datastrukturer och algoritmer

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

Datastrukturer. föreläsning 6. Maps 1

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

Datastrukturer och algoritmer

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

Datastrukturer och algoritmer

Interfacen Set och Map, hashtabeller

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

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

Hashtabeller. TDA416, lp3 2016

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

Datastrukturer och algoritmer

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

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

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

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

Föreläsning 6 Datastrukturer (DAT037)

Diskutera. Hashfunktion

Föreläsning 10 Innehåll

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

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

Föreläsning 11 Innehåll

Inlämningsuppgift och handledning

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

Innehåll. Mina målsättningar. Vad krävs för att nå dit? Obligatoriska uppgifter. Websajten. Datastrukturer och algoritmer

Programkonstruktion och. Datastrukturer

Grundläggande datalogi - Övning 4

Hashtabeller! (& kanske lite sortering)

Tentamen Datastrukturer D DAT 035/INN960

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Datastrukturer och algoritmer

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

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

Datastrukturer och algoritmer

Datastrukturer. föreläsning 10. Maps 1

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

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

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

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

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

Innehåll. Sökning och hashtabeller. En bilsamling att söka i. En bil-klass att söka efter. Hur hittar vi alla bilar som uppfyller ett annat villkor

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

Föreläsning 14 Innehåll

Lösningar Datastrukturer TDA

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

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

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

Tentamen Datastrukturer D DAT 035/INN960

Programkonstruktion och Datastrukturer

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

Föreläsning 5 Datastrukturer (DAT037)

Datastrukturer och algoritmer

ADT Set, Map, Dictionary. Iteratorer TDDD86: DALGP. Tommy Färnqvist, IDA, Linköpings universitet

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

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

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

Databaser - Design och programmering. Minnesteknik. Minnesteknik, forts. Hårddisk. Primärminne (kretsteknik) Fysisk design av databasen

Tentamen Datastrukturer för D2 DAT 035

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

Tentamen Datastrukturer, DAT037 (DAT036)

Collections och datastrukturer. Kursbokens kapitel 13 och

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.

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

Föreläsning Datastrukturer (DAT037)

Övningsuppgifter #11, Programkonstruktion och datastrukturer

Repetition av OOP- och Javabegrepp

Tentamen kl Uppgift 4. Uppgift 5

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

Tommy Färnqvist, IDA, Linköpings universitet

Repetition av OOP- och Javabegrepp

Facit Tentamen TDDC (7)

Föreläsning 1 Datastrukturer (DAT037)

Databaser Design och programmering Minnesteknik Minnesteknik, forts Utvecklingen Hårddisk Hårddisk, forts

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

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

Ö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

TDDI16 Datastrukturer och algoritmer. Prioritetsköer, heapar, Union/Find

Övningsuppgifter kapitel 8

Datastrukturer. föreläsning 10. Maps 1

KTH, NADA, Vahid Mosavat. 1. Flervalsfrågor (5p)

Datastrukturer och algoritmer

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

Programkonstruktion och. Datastrukturer

Algoritmer och datastrukturer

Fredag 10 juni 2016 kl 8 12

DAI2 (TIDAL) + I2 (TKIEK)

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.

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

13 Prioritetsköer, heapar

Datastrukturer. föreläsning 3. Stacks 1

Dugga Datastrukturer (DAT036)

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

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

Transkript:

Innehåll F7: Tabell, hashtabell, relation & lexikon Niclas Börlin 5DV49 Datastrukturer och algoritmer Tabell Hashtabell Relation Lexikon Tabell Gränsyta till Tabell Modell Uppslagsbok Organisation Ändlig avbildning av argument på värden Dynamisk datatyp abstract datatype Table(arg,val) Empty() Table(arg,val) Insert(x:arg,y:val,t:Table(arg,val)) Table(arg,val) Isempty (t:table(arg,val)) Bool Lookup (x:arg, t:table(arg,val)) (Bool,val) Remove (x:arg, t:table(arg,val)) Table(arg,val)

Fält kontra Tabell Konstruktion Likheter: Bägge lagrar värden. Fältets index svarar mot tabellens argument/nyckel. Skillnader: Tabell kräver att likhet ska vara definierat för argumentet/nyckeltypen. Fält kräver dessutom att en ordningsrelation (större än, mindre än). Tabell är en dynamisk datatyp, fält oftast en statisk. Tabell kan konstrueras som Fält om:. argumenttypen är diskret linjärt ordnad,. det går att hitta en ODEF -konstant, 3. argumenten är relativt väl samlade. : Postadress. Bilregister. Artikelregister. ej definierad Konstruktion forts. Lista av par: Insättningar Lista av par Riktad Lista Hashtabell Binärt sökträd (senare) Två huvudalternativ:. Sätt in det nya paret först i listan.. Kolla först om det finns par med samma argument, byt ut. Dubletthantering

Tabell Prestanda Jämför konstruktionen som Fält respektive Lista av par med avseende på kostnad för: Insättningskostnad Avläsning Borttagning När väljer man vad? Tillämpningar av Tabell Ofta använd datatyp, t.ex. för att Benämna objekt, ex. (Artikel-nr) 3-37: Nätverkskabel, (Registration) SE-GVS: Piper Cherokee. Associera egenskaper hos ett objekt med motsvarande värden, ex. 3-37: Namn: Nätverkskabel Pris: SEK 79 Hyllplacering: E4 Lagerstatus: 3 st SE-GVS: Type: Piper PA- Seats: 4 Fuel capacity: L Gear type: Fixed tricycle Representera samband mellan objekt, korsreferenser, ex. personer som äger en fastighet, personer som är medlemmar av en klubb. Kompilatorer (symboltabeller). Existens (är symbolen definierad?) Attribut (värdetyp, räckvidd) Fält som Tabell (glesa matriser). Tippel, Post Relation En Relation är en egenskap definierad för en grupp av objekt. Liknar Tabell. Associerar argument med värden. Tippel (tuple) består av n ordnade element, ex. för koordinater (9,4,3). Inspect-first((9,4,3)) 9, Inspect-second((9,4,3)) 4. Post (record, struct) är som abstrakt datatyp sett samma sak som Tippel, ex. för (3-37, Nätverkskabel, 79). Inspect-first((3-37, Nätverkskabel, 79)) 3-37, Inspect-second((3-37, Nätverkskabel, 79)) Nätverkskabel. : relationen mellan fastighetsägare och fastigheter (Niclas Börlin, Innertavle :3,.5), (Anna Lexell, Innertavle :3,.5), eller relationen klubb/medlem (Niclas Börlin, Umeå flygklubb, normal-medlem, <tom>), (Eisten Nilsson, Umeå flygklubb, normal-medlem, flyglärare), (Mats Johansson, Umeå flygklubb, normal-medlem, <tom>), (Niclas Börlin, Sturup flygklubb, elev-medlem, <tom>). (Henrik Persson, Sturup flygklubb, normal-medlem, <tom>). Jämför relationsdatabaser, SQL.

Tabell Att jämföra argument Om argumenttypen inte är inbyggd (ex. int, string, double) utan t.ex. Post måste man definiera (implementera) en jämförelseoperation. Ex. om argumentet är en Post (artikel-nr, namn), definiera likhet som att artikel-numren är lika. Hashtabell Problemet med att implementera en tabell som fält är att grundmängden inte får bli för stor. Vi behöver en hashfunktion som avbildar den större indextypen A till en mindre indextyp B, ex. strängar till heltal. keys John Smith Lisa Smith Sandra Dee hash function buckets 5-976 5-34 3 : : 3 4 5-9655 5 hash chop and mix Hashfunktion Funktionen h(x) avbildar en stor mängd A av nycklar, på en mindre mängd B av tal, ex. för A, B heltal: eller för A datum, B heltal:. h(x) = x mod 3 h(x) = month(x) Kollisioner är oundvikliga och en bra hashfunktion kännetecknas av: Litet förväntat antal kollisioner. Elementen sprids jämnt över mängden. Funktionsvärdet bör påverkas av alla delar av nyckeln. Kollisioner kan hanteras med: Sluten hashing. Öppen hashing. Hashfunktion Sluten hashning Låt B vara en cirkulär vektor, dvs. det första elementet följer efter det sista. Linjär teknik för kollisioner: Om ett element kolliderar (platsen redan upptagen), sätt in det nya elementet på den första lediga platsen efter den upptagna. Ger upphov till klustring (flockning?) i tabellen. Sökning efter ett element börjar på den plats dess hashvärde anger och fortsätter eventuellt framåt. Om det inte påträffats före nästa lediga plats så finns det inte i tabellen. Vid borttagning i tabellen kan inte platsen lämnas tom då kan senare sökningar misslyckas. Därför måste i stället en borttagen -markör sättas in i tabellen.

Sluten hashning, linjär teknik Grundmängden,,..., 5 ska avbilda på värdena,,..., 6. Låt betyda ledig och 6 betyda borttagen. Given mängden {,, 7, 64, 5} och hashfunktionen 3 4 5 6 h(x) = x mod 7 h() = h() = h(7) = 6 h(64) = h(5) = 6 7 64 7 5 64 7 Sluten hashning, linjär teknik Efter borttagning av : h() = 3 4 5 6 5 6 64 7 Sluten hashning, linjär teknik Komplexitet Värstafallskomplexiteten för samtliga operationer är O(n), där n är antalet element som finns insatta i tabellen. Är dock ytterst osannolikt. Alla element måste ligga i en följd. Under förutsättning att tabellen inte fylls mer än till en viss del får man i medeltal O() för operationerna. Hashtabeller Fyllnadsgrad En hashtabells fyllnadsgrad (λ) definieras som kvoten mellan antalet insatta element och antalet platser i tabellen. En tom tabell har λ = och en full λ =. För linjär teknik vet man att: Medelantalet platser som måste prövas vid en insättning och misslyckad sökning är uppåt begränsad av ( + ( λ) Medelantalet platser för en lyckad sökning är uppåt begränsad av ( + ). λ ). En halvfull tabell (λ =.5) ger.5 resp..5. När fyllnadsgraden blir hög (λ >.75) blir operationerna för den linjära tekniken långsam (.5 resp..5).

Sluten hashning, kvadratisk teknik Sluten hashning, kvadratisk teknik Låt H vara ett elements hash-värde. Vid linjär teknik testas positionerna H, H +, H +, H + 3,... mod m tills en ledig plats hittas. Vid kvadratisk teknik testas i stället positionerna H, H +, H +, H + 3,... mod m =H, H +, H + 4, H + 9,... mod m tills en ledig plats hittas. Sätt in talen 9,, 49, 5, 9 i en tabell med platser. h(x) = x mod 3 4 5 6 7 9 49 5 9 9. 9 mod = 9: ledig.. mod = : ledig. 3. 49 mod = 9: upptagen, prova H + = : ledig. 4. 5 mod = : upptagen, H + = 9: upptagen, H + 4 = : ledig. 5. 9 mod = 9: upptagen, H + = : upptagen, H + 4 = 3: ledig. Sluten hashning, kvadratisk teknik Problem Öppen hashning Med olyckligt vald hashfunktion och tabellängd finns risk att man inte hittar en ledig plats även om den finns! : Tabellstorlek = 6, hashfunktion h(x) = x mod 6. Efter att ha stoppat in elementen, 6, 3, och 64 finns ingen mer plats för tal med h(x) =. De enda platser som kommer att prövas är de upptagna,, 4, 9,, 9, 4,,,, 4, 9,... Men: Om kvadratisk teknik används och tabellens storlek är ett primtal så kan ett nytt element alltid stoppas in om λ <.5. Fullständig komplexitetsanalys saknas men i praktiken ger den upphov till mindre klustring än linjär hashing. I stället för en cirkulär vektor används en k-vektor av Lista, h(x) = x mod k. I lista nummer i ligger alla element med hashvärde i. Värstafallskomplexitet: O(n) för alla operationer (alla element i samma lista), där n är antalet insatta element. Medelfallskomplexitet: Insättning och misslyckad sökning blir n/k. Lyckad sökning blir (n )/(k + ). Tumregel: Inte fler än k element bör sättas in.

Öppen hashning Grundmängden,,..., 5 ska avbildas på värdena,,..., 6. Given mängden {,, 7, 64, 5} och hashfunktionen 3 4 5 7 64 h(x) = x mod 7. Teoretiska resultat Från http://www.ida.liu.se/labs/logpro/ulfni/dalg/resources/f.pdf Antal sonderingar vid olika fyllnadsgrad: Fyllnadsgrad (%) 5 5 75 9 99 Lyckad sökning Sluten, linjär.6.7.5.5 5.5 5.5 Sluten, kvadratisk.5.5.39.5.56 4.7 Öppen.5..5.37.45.5 Misslyckad sökning Sluten, linjär..39.5.5 5.5 5 Sluten, kvadratisk..33. 4.. Öppen..5.5.75.9.99 6 7 5 Hashfunktionen Lexikon Vi har använt h(x) = x i exemplen. Fungerar bra om m är ett primtal. Annars kan periodicitet uppstå. Finns mer generella metoder, t.ex. där mod m h(x) = ((c x + c ) mod p) mod m, divisorn p är ett stort primtal > m, t.ex. 453, konstanterna c och c är heltal > och < p. c är ofta satt till. Slumptalsgeneratorer, krypteringsalgoritmer. Ett Lexikon är som en tabell utan tabellvärden. Lexikon är en solitär datatyp. Man kan göra modifieringar av isolerade dataobjekt, ex. lägga till, ta bort eller slå upp element, men inte kombinera/bearbeta två eller flera Lexikon. Jämför den icke-solitära datatypen Mängd: Det går att lägga till och ta bort element till både Mängd och Lexikon. Både en Mängd och ett Lexikon är oordnade datatyper. Det går att bilda unionen eller snittet av två mängder. Motsvarande för två Lexikon är inte definierat. ( Det finns bara ett Lexikon av svenska ord. )