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

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

OOP Objekt-orienterad programmering

Tentamen i Algoritmer & Datastrukturer i Java

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

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

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

Föreläsning 2. Länkad lista och iterator

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

Lösningsförslag till exempeltenta 1

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 3. Stack

Laboration A Objektsamlingar

Tentamen, EDAA20/EDA501 Programmering

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

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

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

Länkade strukturer. (del 2)

Föreläsning 2. Länkad lista och iterator

Del A (obligatorisk för alla)

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

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Föreläsning 4 Innehåll

Algoritmer och datastrukturer

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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.

LÖSNINGSFÖRSLAG

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Sammanfattning och repetition utgående från typiska tentamensuppgifter

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Datastrukturer. föreläsning 6. Maps 1

Länkade strukturer, parametriserade typer och undantag

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

Föreläsning 3. Stack

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

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

Programkonstruktion och. Datastrukturer

13 Prioritetsköer, heapar

Interfacen Set och Map, hashtabeller

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

Tommy Färnqvist, IDA, Linköpings universitet

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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

Dugga Datastrukturer (DAT036)

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

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

Laboration 13, Arrayer och objekt

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

Tentamen OOP

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Programmering för språkteknologer II. OH-serie: Sökning och sortering. Algoritm

Föreläsning 10 Datastrukturer (DAT037)

Saker du ska kunna Föreläsning 13 & 14

Föreläsning 9 Innehåll

Introduktion till Datalogi DD1339. Föreläsning 5 13 okt 2014

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Polymorfi. Objektorienterad och komponentbaserad programmering

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

List.java. List.java. Printed by Tom Smedsaas

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

Föreläsning 10 Innehåll

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

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

Tentamen kl Uppgift 4. Uppgift 5

Diskutera. Hashfunktion

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Objektorienterad programmering i Java

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

Algoritmer. Två gränssnitt

Föreläsning REPETITION & EXTENTA

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Lösningsförslag till tentamen Datastrukturer, DAT037,

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Föreläsning 8: Exempel och problemlösning

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine

Tentamen i Algoritmer & Datastrukturer i Java

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning 11 Innehåll

Tentamen ID1004 Objektorienterad programmering December 15, 2012

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

Transkript:

Innehåll Sökning och hashtabeller Henrik Bergström henrikbe@dsv.su.se Sökning i linjära strukturer Söka efter många objekt Sökning efter ett objekt Sekventiell sökning Binär sökning Sökning efter godtyckligt kriterium Hashning Open-address hashing Chained hashing En bil-klass att söka efter class Bil{ private String marke, regnr; private int mil, year; public Bil(String ma, String r, int mi, int y){ marke=ma; regnr=r; mil=mi; year=y; public String getmarke(){ return marke; public String getregnr(){ return regnr; public int getmil(){ return mil; public int getyear(){ return year; public String tostring(){ return regnr+" "+marke+" från år:"+year; En bilsamling att söka i public ArrayList getall(string sökt){ if (minabilar[x].getmarke().equals(sökt)) Obs: detta är en minimal samling Hitta alla bilar av ett visst märke public ArrayList getall(string sökt){ if (minabilar[x].getmarke().equals(sökt)) Anrop: BilSamling bs = new BilSamling(); // bs fylls med bilar ArrayList volvobilar = bs.getall( Volvo ); Hur hittar vi alla bilar som uppfyller ett annat villkor En metod för varje villkor Skicka med villkoret 1

Att skicka med villkoret - förberedelser public interface Urval{ boolean skaväljas(bil b); public ArrayList getall(urval u){ if (u.skaväljas(minabilar[x])) Att skicka med villkoret - användandet class Val implements BilSamling.Urval{ public boolean skaväljas(bil b){ return b.getyear()==1995 && b.getmil()>3000; Anrop: BilSamling bs = new BilSamling(); // bs fylls med bilar ArrayList resultat = bs.getall(new Val()); Sekventiell sökning Börja från början Kontrollera objekt för objekt Hittar du det sökta elementet - returnera det Har du gått igenom hela listan - returnera null Sekventiell sökning if (minabilar[x].getregnr().equals(regnr)) return minabilar[x]; return null; Binär sökning Mycket snabbare Kräver att objekten är sorterade Kontrollera mittersta elementet Om det är det sökta returnera det Om sökintervallet är tomt så returnera null Annars upprepa med den del av intervallet där det sökta objektet måste finnas Binär sökning public Bil binsearch(string regnr){ int start=0, stop=antal-1, middle; while (start<=stop){ middle=(start+stop)/2; String middlenr=minabilar[middle].getregnr(); int cmp=middlenr.compareto(regnr); if (cmp==0) return minabilar[middle]; else if (cmp<0) start=middle+1; else stop=middle-1; return null; 2

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Objektnyckel=array-index Nr: 2 Nr: 6 Nr: 9 Nr: 14 class Faktura{ int nr; String vem; dubble belopp; // etc... Objektnyckel=array-index Hur gör vi med bilarna? Hashning Hash-funktion beräknar index från objektnyckeln Ska ge slumpmässigt index inom intervallet Index ska bli jämt fördelade inom intervallet Måste anpassas till nyckeln Hashning Nyckeln är ett datum på formen ÅÅMMDD Arrayen består av 1000 positioner Konstruera en hashfunktion Ett första försök Ett andra försök int hash1(int fdat){ return fdat%1000; int hash2(int fdat){ int tal = (fdat%100) * 13 + (fdat/100%100) * 17 + (fdat/10000) * 23; return tal%1000; 3

Hashning av bilar private int hash(string rnr){ int sum=0; for (int x=0; x<rnr.length(); x++) sum+=rnr.charat(x); return sum%100; minabilar[index]=b; Kollisioner OPW923 => index 4 OPW924 WOP392 return minabilar[index]; Jämförelse mellan datumalgoritmerna Open-address hashing 200 180 160 Antal per index alg 1 200 180 160 Antal per index alg 2 OPW923 Vid kollision - sök framåt tills nästa lediga plats. Obs rundgång från 99 till 0. 140 120 140 120 OPW924 100 80 60 40 20 0 0 200 400 600 800 1000 100 80 60 40 20 0 0 200 400 600 800 1000 WOP392 Har index = 4 Ruta 4 upptagen Ruta 5 upptagen Hamnar i ruta 6 Open-address hashing while (minabilar[index]!=null){ index++; if (index==100) index=0; minabilar[index]=b; Chained hashing OPW923 Varje ruta tillåts innehålla flera objekt. En länkad lista med ställföreträdare. while (minabilar[index]!=null &&!minabilar[index].getregnr().equals(regnr)){ index++; if (index==100) index=0; return minabilar[index]; OPW924 WOP392 4

Chained hashing private class Link{ Link next; Bil obj; Link(Link n, Bil o){ next=n; obj=o; private Link[]minaBilar=new Link[100]; private int hash(string rnr){ int sum=0; for (int x=0; x<rnr.length(); x++) sum+=rnr.charat(x); return sum%100; Chained hashing - forts minabilar[index]=new Link(minaBilar[index], b); Link l=minabilar[index]; while (l!=null &&!l.obj.getregnr().equals(regnr)) l=l.next; return l!=null? l.obj : null; 5