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



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

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

13 Prioritetsköer, heapar

Dugga Datastrukturer (DAT036)

Föreläsning 10. ADT:er och datastrukturer

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

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

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

Algoritmer. Två gränssnitt

Föreläsning Datastrukturer (DAT036)

Föreläsning REPETITION & EXTENTA

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 9 Innehåll

Tentamen Datastrukturer D DAT 036/DIT960

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

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Laboration 13, Arrayer och objekt

Seminarium 13 Innehåll

Föreläsning 11 Innehåll

Tentamen Datastrukturer (DAT037)

Föreläsning 9 Datastrukturer (DAT037)

Lösningsförslag till exempeltenta 1

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

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

Föreläsning 12 Innehåll

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

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

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

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

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition

Föreläsning 10 Innehåll

Instuderingsfrågor, del D

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd

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

Föreläsning 4 Datastrukturer (DAT037)

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 27 maj 2008

Sökning och sortering

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

Interfacen Set och Map, hashtabeller

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

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

Tentamen Datastrukturer för D2 DAT 035

Föreläsning 13 och 14: Binära träd

Tentamen kl Uppgift 4. Uppgift 5

Objektorienterad programmering i Java

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

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

Exempeltenta GruDat 2002/2003

Föreläsning 10 Datastrukturer (DAT037)

Föreläsning 11 Innehåll. Sortering. Sortering i Java. Sortering i Java Comparable. Sortering. O(n 2 )-algoritmer: urvalssortering insättningssortering

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Föreläsning 11 Datastrukturer (DAT037)

Föreläsning 14 Innehåll

Sortering. Föreläsning 12 Innehåll. Sortering i Java. Sortering i Java Exempel. Sortering

Tentamen i Objektorienterad programmering

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

Föreläsning 13 Innehåll

Sätt att skriva ut binärträd

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

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

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

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

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

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

Föreläsning 4: Kombinatorisk sökning

Föreläsning 9 Innehåll

Grundläggande programmering med C# 7,5 högskolepoäng

Övningsuppgifter #11, Programkonstruktion och datastrukturer

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Datastrukturer som passar för sökning. Föreläsning 10 Innehåll. Inordertraversering av binära sökträd. Binära sökträd Definition

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

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Föreläsning 3-4 Innehåll

SORTERING OCH SÖKNING

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

Fredag 10 juni 2016 kl 8 12

Grundläggande datalogi - Övning 4

Datastrukturer som passar för sökning. Föreläsning 11 Innehåll. Binära sökträd Definition. Inordertraversering av binära sökträd

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Föreläsning 12 Innehåll

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Tentamen Datastrukturer, DAT037 (DAT036)

DELPROV 1 I DATAVETENSKAP

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

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

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

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

Tentamen OOP

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

Datastrukturer. föreläsning 6. Maps 1

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

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Länkade strukturer, parametriserade typer och undantag

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning Datastrukturer (DAT037)

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Transkript:

Programmering för Språkteknologer II Markus Saers markus.saers@lingfil.uu.se Rum -040 stp.lingfil.uu.se/~markuss/ht0/pst Innehåll Associativa datastrukturer Hashtabeller Sökträd Implementationsdetaljer för att använda associativa datastrukturer Associativa datastrukturer Låter oss associera godtyckliga nycklar med godtyckliga värden Vektor: associerar heltal med godtyckliga värden Behöver inte vara tät Vektorer: måste ha plats för alla nycklar från 0 till den högsta Nycklar måste vara unika En nyckel får inte associeras med flera värden Utgör en mängd Vektorer: mängden giltiga index Associativa datastrukturer Två vanliga implementationer Hashtabeller (Jätte) snabba O(1) Osorterade Nästan täta Sökträd Snabba O(logn) Sorterade Helt täta Antag att vi har en vektor med sorterade element [ 10 0 300 8 ] Vi vill finna ett givet element i vektorn Titta på det mittersta elementet Avgör om det sökta elementet är exakt lika, större eller mindre < Avgör om vi är färdiga (lika) eller i vilken halva elementet finns (< vänster, > höger) 10 0 300 8 1

10 0 300 8 10 0 300 8!=!= < 10 0 300 8 10 0 300 8!= 10 0 300 8 10 0 300 8!= > ==

10 0 300 8 10 0 300 8 Jämför med 10 0 300 8 10 0 300 8 Jämför med Jämför med / 300 300 300 10 0 8 10 0 8 Jämför med / 300 Jämför med / / 0 / 8 3

: beslutsträd : beslutsträd 10 300 0 8 Vid varje nod: Har vi kommit till det tal vi sökte? Om ja: vi är klara! Om nej: är det sökta talet större eller mindre? Om större: leta i noden till höger Om mindre: leta i noden till vänster Om vi ska vidare från en nod finns två val Beslutsträd = binärt sökträd Sökträd I praktiken binärt sökträd Konkret modellering av beslutsträdet från en binär sökning : algoritm applicerad på en vektor Binära sökträd: datastruktur som direkt modellerar binär sökning Binärt sökträd Består av noder Varje nod har En nyckel Ett värde Ett vänsterbarn som är rot i trädet med alla noder vars nycklar är mindre än nyckeln Ett högerbarn som är rot i trädet med alla noder var nycklar är större än nyckeln Binära sökträd Binära sökträd värde nyckel v. barn h. barn 300 0 8 10 4

Egenskaper Obalanserat binärt sökträd Hur många jämförelser behöver vi göra för att hitta en nyckel? Höjden på trädet Ett balanserat träd är log n högt: O(log n) log() = 3,17 = 4 Antal noder: 7 Höjd: 7 Söktid: O(n) 10 0 Balanserade binära sökträd Varje gång en nod läggs in kontrollerar trädet att det är i tillräcklig balans Olika metoder Röd-svarta träd AVL-träd Påverkar inte tidskomplexiteten! Söker på nervägen, balanserar på tillbakavägen Däremot den faktiska tiden med en faktor Balanserade binära sökträd Sökning: O(log n) Insättning: O(log n) Borttagning: O(log n) Traversering: O(n) Genomlöpning som besöker varje nod exakt en gång Ny sorteringsalgoritm: TreeSort Lägg in alla värdena som nycklar i ett balanserat binärt sökträd Antal nycklar: n Tid per insättning: O(log n) Total tid: O(n log n) I praktiken långsammare än MergeSort Objekt som nycklar i Tree Trädklasserna behöver något sätt att avgöra vilken ordning nycklarna kommer i Naturlig ordning Jämförelseklass

Naturlig ordning Alla klasser som implementerar Comparable<T> på sig själva har en naturlig ordning Innebär att metoden int compareto(t t) implementeras Ger 0 om objekten är lika Ger < 0 om objektet är mindre än t Ger > 0 om objektet är större än t För heltal: return value t.value; Naturlig = given av klassen Exempel: Point public class Point implements Comparable<Point>{ private int x; private int y; public int compareto(point p) { if (x == p.x) { return y p.y; else { return x p.x; Exempel: Person public class Person implements Comparable<Person> { private String firstname; private String lastname; public int compareto(person p) { if (firstname.equals(p.firstname)) { return lastname.compareto(p.lastname); else { return firstname.compareto(p.firstname); Olika ordningar Nu bestämde vi att personer ordnas efter hur deras namn läsas ut Vad göra om vi vill bygga en telefonkatalog? Ordnad i fösta hand på efternamn Jämförelseobjekt! Implementerar Comparator<T> Comparator<T> Finns ijava.util (måste importeras) Måste implementera metoden int compare(t a, T b) Ska vara som a.compareto(b) Fast enligt den ordning som klassen representerar Exempel: Person public class Person implements Comparable<Person> { private String firstname; private String lastname; public int compareto(person p) { if (firstname.equals(p.firstname)) { return lastname.compareto(p.lastname); else { return firstname.compareto(p.firstname); public String getfirstname() { return firstname; public String getlastname() { return lastname; 6

Personjämförare i telefonkatalogordning import java.util.*; public class PhoneBookPersonComparator implements Coparator<Person> { public int compare(person a, Person b) { if (a.getlastname().equals(b.getlastname()) { return a.getfirstname().compareto(b.getfirstname()); else { return a.getlastname().compareto(b.getlastname()); Användning public class Test { public static void main(string[] args) { TreeSet<Person> people = new TreeSet<Person>(); TreeMap<Person, Integer> phonebook = new TreeMap<Person, Integer>( new PhoneBookPersonComparator() ); // Lägg in personer i people och phonebook for (Person p : people) { // Ordnade efter förnamn sedan efternamn for (Person p : phonebook.keyset()) { // Ordnade efter efternamn sedan förnamn Frågor? 7