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



Relevanta dokument
Föreläsning 13 Innehåll

Föreläsning 14 Innehåll

Föreläsning 13 Innehåll

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

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

Föreläsning 10 Innehåll

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

Seminarium 13 Innehåll

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

Interfacen Set och Map, hashtabeller

Föreläsning 9 Innehåll

Diskutera. Hashfunktion

Föreläsning 11 Innehåll

Inlämningsuppgift och handledning

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

13 Prioritetsköer, heapar

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

Föreläsning 4 Datastrukturer (DAT037)

EDAA01 Programmeringsteknik - fördjupningskurs

Introduktionsmöte Innehåll

Datastrukturer. föreläsning 3. Stacks 1

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

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

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

Tentamen, Algoritmer och datastrukturer

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

Föreläsning 10 Innehåll

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

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Programmering fortsättningskurs

Föreläsning 11 Innehåll

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

Datastrukturer. föreläsning 6. Maps 1

Exempeltenta GruDat 2002/2003

Föreläsning 4 Innehåll

Länkade strukturer, parametriserade typer och undantag

Mål Förklaring av termer

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

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

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

Mål Förklaring av termer

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

Föreläsning 12 Innehåll

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

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

Tentamen Datastrukturer för D2 DAT 035

Föreläsning 3 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT037)

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

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

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

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

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Teoretisk del. Facit Tentamen TDDC (6)

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

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

Föreläsning 1 Datastrukturer (DAT037)

Föreläsning 9 Innehåll

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

EDAA30 Programmering i Java - fortsättningskurs

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

Föreläsning 13 Datastrukturer (DAT037)

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

Facit Tentamen TDDC kl (6)

Teoretisk del. Facit Tentamen TDDC (6)

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Föreläsning 9 Datastrukturer (DAT037)

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

Föreläsning 2 Datastrukturer (DAT037)

Algoritmer och datastrukturer 2012, fo rela sning 8

Tentamen, EDA501 Programmering M L TM W K V

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

Föreläsning Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 035/INN960

Sökning och sortering

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

Facit Tentamen TDDC (7)

Föreläsning 4 Datastrukturer (DAT037)

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

Föreläsning 12 Innehåll

Algoritmer och datastrukturer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning Datastrukturer (DAT036)

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

Fredag 10 juni 2016 kl 8 12

Algoritmer. Två gränssnitt

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

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

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

Tentamen Datastrukturer D DAT 035/INN960

Datastrukturer. föreläsning 10. Maps 1

Föreläsning 5 Innehåll

Transkript:

Föreläsning 13 Innehåll Algoritm 1: Sortera Exempel på problem där materialet i kursen används Histogramproblemet Schemaläggning Abstrakta datatyper Datastrukturer Att jämföra objekt Om tentamen Skriftlig tentamen både programmeringsuppgifter och teoriuppgifter Problem: Givet en vektor a med n tal, tag reda på de k största. Ex: Talen är 4, 1, 9,, 2, 6 och k = 3 ger svaret, 6, 9 Algoritm: Lagra talen i en vektor och sortera dem. Sedan är det enkelt att avläsa de k största: 1, 2, 4,, 6, 9 Välj en lämplig sorteringsalgoritm. Tidskomplexitet? PFK (Föreläsning 13) VT 201 1 / 20 PFK (Föreläsning 13) VT 201 2 / 20 Algoritm 2: Håll reda på de k hittills största Histogramproblemet Gå igenom de n talen och försök hålla reda på de k största bland de tal vi hittills betraktat. Gå igenom k av talen i vektorn a och sätt in dem i R För varje tal t av de övriga (n - k) ur a om t > minsta talet i R tag bort minsta talet ur R sätt in t i R De k största talen finns nu att hämta i R Välj en lämplig datastruktur för R. Tidskomplexitet? Man har n element i en samling. Man vill veta vilka olika element som förekommer och hur många gånger de förekommer. Ex: En text med ord. Vi vill kartlägga vilka ord som förekommer och antal förekomster av resp. ord. Ex: Vi har ett register över hela befolkningen. Vi vill ta reda på vilka olika förnamn som förekommer och hur många som har dessa namn. Ex: Kasta tärning många gånger. Hur många 1:or, 2:or...? Namnet på problemet beror på att man kan presentera resultatet i form av ett histogram om man vill. Se nästa bild. PFK (Föreläsning 13) VT 201 3 / 20 PFK (Föreläsning 13) VT 201 4 / 20

Histogramproblemet Exempel: kasta tärning En tärning kastades 10 gånger: {4, 2, 3, 2, 4, 2, 2, 6, 2,4} Resultat som en lista av par (element,frekvens): (2,) (3,1) (4,3) (6,1) Resultat som histogram: frekvens 4 3 2 1 Histogramproblemet lösning för ett specialfall Specialfall: elementen är heltal i ett begränsat intervall 0..s. skapa en heltalsvektor a av storlek s + 1; för vart och ett av elementen e: a[e]++; a 0 1 2 3 4 6 0 0 1 3 0 1 1 2 3 4 6 element PFK (Föreläsning 13) VT 201 / 20 PFK (Föreläsning 13) VT 201 6 / 20 Histogramproblemet generell lösning Histogramproblemet generell lösning Lösning Iexempletmedtärningskastvardetenkeltattmappaetttärningskastmed ett index i vektorn. Antal 1:or lagras i a[1], antal 2:or i a[2] osv. Men elementen kan ha godtycklig typ, t.ex. typen String om det är namn som räknas. Hur ska vi göra i så fall? Algoritm 1: Sortera elementen element som är lika hamnar då intill varandra Iterera genom den sorterade samlingen och räkna frekvenser Algoritm 2: Använd en map, t.ex. HashMap. Hur ska mappen användas? PFK (Föreläsning 13) VT 201 7 / 20 PFK (Föreläsning 13) VT 201 8 / 20

Problemexempel: schemaläggning av maskiner Schemaläggning av maskiner Vi har m identiska maskiner och n jobb att utföra. Tiden för att utföra jobb i är t i. En maskin kan bara göra ett jobb i taget. Ett enskilt jobb kan inte delas mellan olika maskiner. Ett jobb som en maskin börjat utföra görs färdigt utan avbrott. Hur ska jobben allokeras till maskinerna för att tiden det tar att slutföra alla jobb ska bli så kort som möjligt? Man känner inte till någon effektiv algoritm som löser problemet: Att prova alla möjligheter går men kostar exponentiell exekveringstid. Approximativa algoritmer måste användas i praktiken för stora probleminstanser. En sådan är Longest Processing Time first. PFK (Föreläsning 13) VT 201 9 / 20 PFK (Föreläsning 13) VT 201 10 / 20 Jobben allokeras till maskiner efter avtagande tidsåtgång. Jobbet allokeras till den maskin som har minst att göra (blir ledig tidigast). Ger inte alltid den optimala lösningen Ex: 2 maskiner och jobb med tidskrav 6, 6,,,. Total tidsåtgång för att avsluta alla jobb blir 16: Ex: 3 maskiner M 1..M 3 och 7 jobb j 1..j 7 med tidsåtgång 2, 14, 4, 16, 6,, 3. M 1 16 ( j 4 ) M 2 M 3 14 ( j ) 2 3 ( j ) 7 6 ( j ) ( j 6 ) 4 ( j 3 ) 2 ( j 1 ) Total tidsåtgång för att avsluta alla jobb: 17 M 1 6 M 2 6 Men bättre lösning finns tidsåtgång 1: M 1 M 2 6 6 PFK (Föreläsning 13) VT 201 11 / 20 PFK (Föreläsning 13) VT 201 12 / 20

Implementering Man kan implementera med hjälp av prioritetskö. Maskinerna sätts in i prioritetskön. Maskinerna innehåller attributet prio = sammanlagda tiden för maskinens jobb (= tidpunkt då maskinen blir ledig). Alla maskiner är från början lediga. De har då prioritet = 0. Givet en vektor t med n element, där t[i] =tidsåtgångförjobbi. sortera vektorn t i avtagande ordning skapa en prioritetskö q låt alla maskiner få prioritet 0 och sätt in dem i q för i = 0..n-1 Machine m = q.poll(); m.prio = m.prio + t[i]; q.offer(m); Fallet antal jobb apple antal maskiner Ispecialfalletantaljobbapple antal maskiner (n apple m) kanalgoritmen förenklas: Alla jobb kan då sättas igång samtidigt på var sin maskin. Det blir det längsta jobbet som bestämmer tidsåtgången. Vi behöver alltså bara söka maximum av elementen i vektorn t. PFK (Föreläsning 13) VT 201 13 / 20 PFK (Föreläsning 13) VT 201 14 / 20 tidskomplexitet Allmänna fallet Vi antar att antal jobb > antal maskiner (n > m). Sortera jobben efter avtagande tidsåtgång kostar O(n log n) med en effektiv metod Bygga en heap och sätta in de m maskinerna kostar O(m) eftersom alla maskinernas prioritet är lika initialt poll n gånger och offer n gånger i heapen av storlek m kostnad O(n log m) Totalt: O(n log n) Abstrakt datatyp (ADT) En abstrakt modell tillsammans med de operationer man kan utföra på den. Ex: lista, stack, kö, mängd, lexikon (Eng. map), prioritetskö Datastruktur En samling variabler som hör ihop på något sätt. Ex: vektor, enkellänkad lista, balanserat binärt sökträd, hashtabell, heap Den abstrakta datatypen lexikon beskriver en samling nyckel-värdepar där nycklarna är unika. Viktiga operationer är insättning, sökning, borttagning. Lexikon kan effektivt implementeras med hjälp av ett balanserat binärt sökträd eller en hashtabell. Exempel på klasser i Java.util är TreeMap och HashMap. PFK (Föreläsning 13) VT 201 1 / 20 PFK (Föreläsning 13) VT 201 16 / 20

Skugga equals Implementera Comparable eller Comparator Inuti Javas samlingsklasser måste ibland element jämföras. Det ställer krav på den klass som beskriver de element som ska sättas in i samlingen. Exempel: Antag att vi skrivit en klass Book där två Book-objekt med samma isbn-nummer ska betraktas som lika. public class Book { Om vi sätter in Book-objekt i en lista av typen ArrayList<Book> eller LinkedList<Book> måste equals skuggas i klassen Book. Annars fungerar inte metoderna contains, remove,... som avsett. Ivissasammanhangjämförsomettelementärmindreän,likamed,större än ett annat. Detta görs i klasser med binära sökträd (TreeSet<Book>, TreeMap<Book,...>) ellerheapar(priorityqueueu<book>) samtvid sortering. Låt klassen Book implementera interfacet Comparable. public class Book implements Comparable<Book> { private int compareto(book other) {...} eller om det inte är lämpligt skriv en klass som implementerar interfacet Comparator. PFK (Föreläsning 13) VT 201 17 / 20 PFK (Föreläsning 13) VT 201 18 / 20 Skugga hashcode och equals I Javas klasser med hashtabeller används metoden hashcode (för att hitta rätt plats i vektorn) samt equals (för att söka efter en nyckel bland element med lika hashkod). Om man sätter in Book-objekt i en mängd av typen HashSet<Book> eller har nycklar av typen Book i en HashMap<Book,...>) så måste både hashcode och equals skuggas i klassen Book. public class Book { public int hashcode() {...} public boolean equals(object other) {...} Övrigt Förutom det som repeteras på föregående sidor har vi bland annat sysslat med Interface Exceptions Generiska klasser och metoder Tidskomplexitet Rekursion Grafiska användargränssnitt (kommer inte på tentan :) ) Sortering PFK (Föreläsning 13) VT 201 19 / 20 PFK (Föreläsning 13) VT 201 20 / 20