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

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

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

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

Seminarium 13 Innehåll

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

Föreläsning 13 Innehåll

Föreläsning 4 Datastrukturer (DAT037)

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

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

Föreläsning 14 Innehåll

13 Prioritetsköer, heapar

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

Föreläsning 4 Datastrukturer (DAT037)

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

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

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

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

Datastrukturer. Föreläsning 5. Maps 1

Teoretisk del. Facit Tentamen TDDC (6)

Föreläsning 9. Sortering

Föreläsning Datastrukturer (DAT036)

Föreläsning 9 Datastrukturer (DAT037)

TDDC30 Programmering i Java, datastrukturer och algoritmer

Träd Hierarkiska strukturer

Facit Tentamen TDDC kl (6)

Tentamen, Algoritmer och datastrukturer

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Lösningar Datastrukturer TDA

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.

Föreläsning 9 Innehåll

Trädstrukturer och grafer

Teoretisk del. Facit Tentamen TDDC (6)

Tentamen TEN1 HI

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

Tildatenta Lösningsskiss

Tentamen Datastrukturer, DAT037 (DAT036)

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

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

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

Fredag 10 juni 2016 kl 8 12

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

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

Tentamen Datastrukturer, DAT037 (DAT036)

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

Algoritmer och datastrukturer 2012, fo rela sning 8

Magnus Nielsen, IDA, Linköpings universitet

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

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

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Tommy Färnqvist, IDA, Linköpings universitet

Tentamen Datastrukturer (DAT036)

Länkade strukturer, parametriserade typer och undantag

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

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

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

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 10 Datastrukturer (DAT037)

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

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

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.

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

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

Föreläsning 11 Datastrukturer (DAT037)

Föreläsning 10 Innehåll

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

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

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

Tentamen Datastrukturer för D2 DAT 035

Algoritmer och datastrukturer

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

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

Föreläsning 11 Innehåll

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

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

Föreläsning 5 Datastrukturer (DAT037)

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

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

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

Föreläsning 2 Datastrukturer (DAT037)

Objektorienterad Programkonstruktion

Facit Tentamen TDDC (7)

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

Diskutera. Hashfunktion

Tentamen Datastrukturer D DAT 035/INN960

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

Laboration 13, Arrayer och objekt

Tentamen i Algoritmer & Datastrukturer i Java

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

Föreläsning 9 Innehåll

Ä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.

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

Sökning och sortering

Föreläsning 11 Innehåll

Datastrukturer. föreläsning 10. Maps 1

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

Transkript:

TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Prioritetskö Heap Representation som länkat träd, array Heapsort 1

Innan vi börjar: Glöm inte att anmäla er till tentan via studentportalen! Det finns två tentapass, det spelar ingen roll vilket man anmäler sig till. Men man får bara gå upp på ett av dem i denna tentaperiod. Träd-quiz! https://www.mentimeter.com/s/7f6d7f3331dd70c41c2fa46d243a4026/0c0de7a350ba 2

Problemet? Scenario 1: I ett musikspelarprogram kan användaren lägga till låtar i en spellista. Programmet spelar sedan upp låtarna i prioritetsordning. Prioriteten bygger på betyg, hur ofta en låt har spelats, och hur länge sedan den senast spelades upp. Scenario 2: Ett flygbolag har ett fullbokat plan. Fler kunder vill följa med så de ställer sig på en standby-kö. Vilka som får ta ev. avbokade platser beror betalad summa, frequent flyer poäng, etc.. 3

ADT Prioritetskö Definition En prioritetskö är en samling nyckel-värde par med två fundamentala metoder: insert(prioritet, värde) värde removemin() Associerar ett värde med en nyckel Tar bort och returnerar elementet med högst prioritet Nyckeln kan vara vilken typ som helst: tal, bokstäver, datum... Nyckeln anger värdets prioritet. (mindre värde på prioritet => högre prioritet) 4

ADT Prioritetskö variant 1 Gränssnittet för ADT prioritetskö: insert(nyckel, värde) värde removemin() värde min() int size() boolean isempty() Associerar ett värde med en nyckel Tar bort och returnerar elementet med högst prioritet Returnerar elementet med högst prioritet Returnerar antalet element i kön Testar om kön är tom Stoppas in i godtycklig ordning Tas ut i sorterad ordning 5

ADT Prioritetskö - variant 2 (PriorityQueue i Java) Prioritetskön tar bara värdena vid insättning. Prioriteten tar man reda på genom att jämföra värdena med varandra: A) Man skickar med en komparator (ett jämföringsobjekt ) när man anropar P-köns konstruktor. B) Man låter värdena vara jämförbara genom att låta klassen implementera interfacet Comparable. PriorityQueue<Song> pq = new PriorityQueue<Song>( new SongComparator() ); PriorityQueue<Song> pq = new PriorityQueue<Song>(); class Song implements Comparable { } 6

Jämförbara objekt För att vi ska kunna använda objekt som nycklar: Måste de implementera interfacet Comparable: public class Song implements Comparable<Song> { int compareto(song right) { } } P-kön anropar compareto på sina element. D.v.s vår compareto-metod, via polymorfi! Eller ha en motsvarande Comparator: public class SongComparator implements Comparator<Song> { int compare(song left, Song right) { } boolean equals(song left, Song right) { } } 7

Sortering Det går att sortera med hjälp av en prioritetskö! PriorityQueue<Song> pq = new PriorityQueue<Song>(); // eller pq = new PriorityQueue<Song>(new SongComparator()); for (Song i : unsortedlist) { pq.add(i); } while (!pq.isempty()) { sortedlist.add(pq.removemin()); } 8

Implementation Implementation som en osorterad lista.. Blir som selection sort när vi väljer! H (6, A ) (4, X ) (8, E ) (2, Y ) / Implementation som en sorterad lista.. Blir som insertion sort när vi stoppar in! H (2, Y ) (4, X ) (6, A ) (8, E ) / Komplexitet? Metod Osorterad lista Sorterad lista size, isempty O(1) O(1) insert O(1) O(n) min, removemin O(n) O(1) 9

Implementation (2) Metod Osorterad lista Sorterad lista Alltså: size, isempty O(1) O(1) insert O(1) O(n) min, removemin O(n) O(1) om det är många insättningsoperationer jmf med remove => välj osorterad lista som implementation. om det är många remove-operationer jmf med insert (?) => välj sorterad lista som implementation. Om min algoritm gör ungefär lika många remove som insert, blir det ju ändå O(n) Kan man inte få så att båda operationerna går halvsnabbt? Självklart! 10

Heap En heap är ett fullständigt binärt träd höjd = log(n) Inte ett binärt sökträd, men.. För varje nod har dess förälder lika eller mindre nyckel Kallas även för min-heap. (Tvärt om blir max-heap). Den minsta nyckeln finns alltid i roten 2 3 8 7 5 9 11

Insättning i Heap 1. Lägg in den nya noden sist i heapen 2. Låt noden bubbla uppåt tills totalordningen återställts 2 1 3 8 3 2 7 5 9 1 7 5 9 8 12

Borttagning ur heap 1. Ta bort rotnoden och ersätt den med noden i slutet av trädet 2. Låt den nya roten bubbla nedåt i trädet tills totalordningen återställts Bubbla alltid med rotens minsta barn 2 9 3 3 8 3 8 5 8 7 5 9 7 5 7 9 13

Arrayrepresentation En heap representeras med fördel med ett fält Kompakt! ADT Representation 2 2 3 8 7 5 9 3 8 7 5 9 Index för root 0 Index för vänster barn Index för höger barn Index för förälder 2*i+1 2*i+2 (i-1)/2 (avrunda nedåt) 14

Komplexitet Operation size, isempty min insert removemin Tid O(1) O(1) O(log(n)) O(log(n)) Att skapa en heap med n element med hjälp av insert tar O(nlog(n)) tid Det finns bättre sätt! 15

Skapa en heap Algoritm för att heapordna en godtycklig array: 1. Börja med att se löven som separata heapar innehållandes en nod var 2. Koppla successivt ihop löven, via sina föräldrar. Bubbla vid behov ned föräldranoden till korrekt plats 3. Upprepa för varje nivå, nedifrån och upp Komplexitet... Räkna antalet bubblingar i värstafallet T(n) = n/2 + n/4 + n/8 +... <= n O(n) 16

Heapsort Algoritm 1. Skapa en heap (O(n)) Måste sorteras i omvänd ordning! 2. Utför removemin för varje element och spara i ett fält O(nlog(n)) Spegelvänder heapens ordning Kan utföras in-place! Fältet konverteras till en heap Elementen plockas bort ur heapen och stoppas in i fältet, från höger till vänster Komplexitet: O(n) + O(nlog(n)) = O(nlog(n)) 17