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

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

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

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

Hashtabeller. TDA416, lp3 2016

Algoritmer och datastrukturer 2012, fo rela sning 8

Datastrukturer. föreläsning 6. Maps 1

Lösningar Datastrukturer TDA

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

Magnus Nielsen, IDA, Linköpings universitet

Trädstrukturer och grafer

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

Föreläsning 10 Innehåll

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

Diskutera. Hashfunktion

Interfacen Set och Map, hashtabeller

Datastrukturer. föreläsning 10. Maps 1

Träd Hierarkiska strukturer

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.

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

Inlämningsuppgift och handledning

Programkonstruktion och. Datastrukturer

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

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

Föreläsning 11 Innehåll

Föreläsning 9 Datastrukturer (DAT037)

Programkonstruktion och. Datastrukturer

Föreläsning 5 Datastrukturer (DAT037)

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Föreläsning Datastrukturer (DAT036)

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

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

Tentamen kl Uppgift 4. Uppgift 5

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

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

Ännu mera träd: 2-3-träd, B-träd, rödsvarta träd, träd Weiss, avsnitt 4.7, 11.5, 12.2, etc.

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Algoritmer och datastrukturer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

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

Föreläsning 6 Datastrukturer (DAT037)

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

Seminarium 13 Innehåll

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

Datastrukturer. föreläsning 10. Maps 1

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

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

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

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

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

Vad har vi pratat om i kursen?

Föreläsning 2. AVL-träd, Multi-Way -sökträd, B-träd TDDD71: DALG. Innehåll. Innehåll. 1 Binära sökträd

Föreläsning 13 Innehåll

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 7. Träd och binära sökträd

Tentamen TEN1 HI

Övningen vill visa på vikten av valet av datastruktur, trots att de ofta erbjuder samma funktionalitet genom sina gränssnitt.

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

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning 14 Innehåll

Sökning och sortering

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Föreläsning 5 TDDC91,TDDE22,725G97: DALG. Föreläsning i Datastrukturer och algoritmer 18 september 2018

Föreläsning 9 Innehåll

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

Självbalanserande AVL-träd Weiss, avsnitt 4.4

Tentamen Datastrukturer för D2 DAT 035

Övningsuppgifter #11, Programkonstruktion och datastrukturer

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

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning 10 Datastrukturer (DAT037)

Självbalanserande träd AVL-träd. Koffman & Wolfgang kapitel 9, avsnitt 1 2

Ett generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn

Länkade strukturer, parametriserade typer och undantag

Hashtabeller! (& kanske lite sortering)

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

Lösningsförslag till exempeltenta 1

DAI2 (TIDAL) + I2 (TKIEK)

Datastrukturer och algoritmer

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

Tildatenta Lösningsskiss

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

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

Samlingar Collection classes

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

Upplägg. Binära träd. Träd. Binära träd. Binära träd. Antal löv på ett träd. Binära träd (9) Binära sökträd (10.1)

Datastrukturer. Föreläsning 5. Maps 1

Försättsblad till skriftlig tentamen vid Linköpings Universitet

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 10 Erik Nilsson, Institutionen för Datavetenskap, LiU

Datastrukturer. föreläsning 9. Maps 1

Grundläggande datalogi - Övning 4

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

Tentamen Datastrukturer, DAT037 (DAT036)

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

Transkript:

Översikt Linjär sökning Sökning Binär sökning Hashtabeller Programmering tillämpningar och datastrukturer 2 Linjär sökning Binärt sökträd Undersök ett element i taget tills du hittar det sökta Komplexitet Behöver i genomsnitt göra n/2 jämförelser om elementet är med Kan behöva göra n jämförelser om elementet inte är med Jfr med Sternbergs experiment med människor, där båda fallen blev n Programmering tillämpningar och datastrukturer Programmering tillämpningar och datastrukturer Sorterad array Binär sökning 1 2 6 8 9 12 Förutsätter sorterad sekvens, t.ex. balanserat sorterat binärt träd: 1. Jämför det sökta med mittenelementet (eller roten i trädet) 1. Om elementet är lika: klar 2. Om större än det sökta, sök vidare i första halvan av sekvensen (vänster delträd). Om mindre: sök vidare i andra halvan (höger delträd) 2. Avsluta om tomt Programmering tillämpningar och datastrukturer Programmering tillämpningar och datastrukturer 6 1

Komplexitet för binär sökning Eliminerar halva arrayen för varje rekursivt anrop (alltså log 2 n anrop) Gör log 2 n jämförelser, dvs. algoritmen växer logaritmiskt: O(log 2 n) Om obalanserat binärt träd, kan binär sökning i värsta fall degenerera till O(n) sökning! För sekvens med 00: O(n) = 00 jämförelser O(log 2 n) = jämförelser Arrays.binarySearch Kan anropas med sorterade arrays Det sökta måste vara av samma typ som elementen i arrayen Annars ClassCastException Om det finns dupplikat i arrayen, går inte att veta vilken av dessa som hittas Programmering tillämpningar och datastrukturer Programmering tillämpningar och datastrukturer 8 Hashtabeller Kan lagra <nyckel, värde>-par Nycklarna Måste vara unika Måste kunna omvandlas till hashkod Värdena behöver inte vara unika <T > <D > <S > <H > <P > hashkoder Hashning hashtabell Programmering tillämpningar och datastrukturer 9 Programmering tillämpningar och datastrukturer Omvandling till hashkod Ex. personnummer Första två siffrorna Summa av alla tio siffror Kodning enligt samma idé som decimala eller binära tal 2 = * 2 + 2* 1 + 2012-289 = *1 9 +2*1 8 + +9 1 primtal, minimerar risken att vi får samma index för olika personnummer Skalning av hashkod till index Hashkod inom intervallet [0 9*1 9 ] Tabellen är mycket mindre än detta Antag tabell med storlek size Då får vi index genom att dividera med size och ta remainder Ex. s.hashcode() % tabell.length(); Innebär att flera hashkoder hamnar på samma index Programmering tillämpningar och datastrukturer Programmering tillämpningar och datastrukturer 12 2

Exempel Hantering av kollisioner hashkod 82 2129869 Två strategier att lägga in element i hashtabellen Öppen adressering Hinkar ( buckets ) 6996 8 8289 2808 Programmering tillämpningar och datastrukturer 1 Programmering tillämpningar och datastrukturer 1 Öppen adressering Inläggning Kolla om tabell[index] upptagen Om ja, kolla tabell[index+1], etc. Sök tills ledig plats Uppslagning Kolla om sökta elementet ligger på index Om inte, kolla tabell[index+1] Sök tills -referens Denna plats hade varit ledig för elementet vid inläggning nyckeln blev aldrig inlagd Nackdelar Hur ta bort element? Kan inte skapa nya -referenser Detta skulle tolkas som slutet på en sökkedja = det sökta elementet finns inte i tabellen Alltså, vid borttagning: Ersätt med dummy-element Slösar med utrymme Fyller upp tabellen Skapar långa sökkedjor Programmering tillämpningar och datastrukturer 1 Programmering tillämpningar och datastrukturer 16 Programmering tillämpningar och datastrukturer 1 Programmering tillämpningar och datastrukturer 18

Programmering tillämpningar och datastrukturer 19 Programmering tillämpningar och datastrukturer 20 Belastningsnivå (load factor) Om tabellen full Oändlig (cirkulär) sökkedja, vet inte om varit här förut (finns inga referenser) Långa uppslagningstider load factor Vill hålla tabellen max % full Rehashing Allokera ny större tabell Insättning av alla gamla värden Ger jämn fördelning, istf en stor klump Programmering tillämpningar och datastrukturer 21 Programmering tillämpningar och datastrukturer 22 Hinkar (buckets) Buckets Vid kollision Länka in det nya elementet till de som redan finns där Buckets (länkade kedjor vid indexet) Fördelar Kan ha (nästan) full tabell Borttagna blir faktiskt borttagna Spar på minnet Programmering tillämpningar och datastrukturer 2 Programmering tillämpningar och datastrukturer 2

Söktid (öppen adressering) Söktid O(1) Men, ju fullare tabell, desto längre sökkedjor, desto längre söktid: O(n) Genomsnittlig sökning vid öppen adressering (L = load factor) 1 1 1+ 2 1 L Söktid (buckets) Hamnar direkt på rätt index Ska söka igenom en lista I genomsnitt halva listan Om snitt listlängden antas vara L/2, blir genomsnittliga söktiden 1+ L 2 Så, buckets bättre vid L > % Programmering tillämpningar och datastrukturer 2 Programmering tillämpningar och datastrukturer 26 pning mellan nycklar och värden Nycklarna måste vara unika Används för Uppslagstabeller Hashtabeller isempty() put(key, Value) get(object) remove(object) Protokoll för Programmering tillämpningar och datastrukturer 2 Programmering tillämpningar och datastrukturer 28 Protokoll för Hash Sorted Tree Concurrent ConcurrentHash «metaclass» Abstract Enum Properties Hash LinkedHash static final float DEFAULT_LOAD_FACTOR = 0.f; public Hash(int initialcapacity, float loadfactor) // konstr. V put(k key, V value) V remove(object key) V get(object key) // hämtning boolean containsvalue(object value) // sökning int size() boolean isempty() clear() Programmering tillämpningar och datastrukturer 29 Programmering tillämpningar och datastrukturer 0