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

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

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

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

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

Föreläsning 9. Sortering

Tommy Färnqvist, IDA, Linköpings universitet

Teoretisk del. Facit Tentamen TDDC (6)

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

SORTERING OCH SÖKNING

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

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

Tommy Färnqvist, IDA, Linköpings universitet. 1 Sortering Heap-sort Merge-sort Sammanfattning... 10

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

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

Föreläsning 11 Datastrukturer (DAT037)

Facit Tentamen TDDC (7)

Sökning och sortering

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

Facit Tentamen TDDC kl (6)

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

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

Magnus Nielsen, IDA, Linköpings universitet

Kapitel 7: Analys av sorteringsalgoritmer

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

Föreläsning 11 Innehåll

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

Sortering. Brute-force. Sortering Ordna element enligt relation mellan nyckelvärden

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

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

Algoritmer. Två gränssnitt

Teoretisk del. Facit Tentamen TDDC (6)

Tentamen Datastrukturer D DAT 036/DIT960

Föreläsning 13 Innehåll

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

Föreläsning 12 Innehåll

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

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

Tentamen Datastrukturer D DAT 036/INN960

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

TDDC30 Programmering i Java, datastrukturer och algoritmer

Linjär sökning. Föreläsning 12. Binär sökning. Exempel: Binära sökträd. Binärt sökträd

Tentamen Datastrukturer (DAT037)

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

Tentamen Datastrukturer D DAT 036/INN960

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

TDDC30 Programmering i Java, datastrukturer och algoritmer

TDDC Terminologi Uppdaterad Fö #1

Tentamen Datastrukturer D DAT 035/INN960

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

Sortering. Intern/ extern? Antaganden. Vad kan vi kräva? Rank sort. Rank sort. På en nod/ distribuerad? Jämförelsebaserad/ icke jämförelsebaserad?

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

TDDC91 & TDDE22 & 725G97 Datastrukturer och algoritmer Datortentamen (DAT1) , 08 12

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

Seminarium 13 Innehåll

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

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

Föreläsning 4 Datastrukturer (DAT037)

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

Tentamen kl Uppgift 4. Uppgift 5

ID1020: Quicksort. Dr. Jim Dowling kap 2.3. Slides adapted from Algoritms 4 th Edition, Sedgewick.

Föreläsning Datastrukturer (DAT037)

Lösningar Datastrukturer TDA

Algoritmer och effektivitet. Föreläsning 5 Innehåll. Analys av algoritmer. Analys av algoritmer Tidskomplexitet. Algoritmer och effektivitet

Algoritmer, datastrukturer och komplexitet

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

F13. Läsanvisning: kap 8 mer sortering. topologisk sortering

Föreläsning 13 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 035/INN960

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen Datastrukturer för D2 DAT 035

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

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

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

Algoritmer, datastrukturer och komplexitet

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

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

Tentamen TEN1 HI

Föreläsning Datastrukturer (DAT037)

Vad har vi pratat om i kursen?

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

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

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örsättsblad till skriftlig tentamen vid Linköpings Universitet

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

Datastrukturer. föreläsning 6. Maps 1

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 5 Innehåll

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

Programkonstruktion och Datastrukturer

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

Föreläsning 13 Datastrukturer (DAT037)

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.

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

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

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

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

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

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

Transkript:

TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 10 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Lägre gräns för sortering Count sort, Bucket sort, Radix sort Utval, Quickselect 1

Beslutsträd Ja Är du stressad? Nej Ta ett bad, Jobba mindre. Ja Har du jobbat 40 timmar den här veckan? Nej Vill du äta pizza ikväll? Sluta slöa, jobba mer. Ja Nej Beställ en capricciosa. Laga fiskgratäng. 2 => Detta är ju ett binärt träd! Löven är utfall.

Beslutsträd (2) Spelkväll vad ska vi spela? Tillgängliga spel är våra utfall.. Ja? Nej Med hur få frågor kan vi välja spel? (Hur kort kan vi göra trädet?) Fia m. knuff Schack Vem där? Poker Monopol Risk Yatzy Backgammon

Beslutsträd (3) Ja Spelkväll vad ska vi spela? Tillgängliga spel är våra utfall.. Är vi hos Johan? Nej Ja ålder < 7 år? Ja Nej Fler än 2? Gillas bluff? Nej Ja Nej Gillas krig? Ja Ja Fler än 2? Nej Gillas tärningar? Ja Nej Nej Fia m. knuff Schack Vem där? Poker Monopol Risk Yatzy Backgammon

Beslutsträd (4) Spelkväll vad ska vi spela? Tillgängliga spel är våra utfall.. Vi kan inte få trädet kortare än höjd 3. Detta eftersom vi inte kan sålla bort mer än hälften av alla spel för varje fråga. För n utfall blir alltså trädet som kortast: log(n) i höjd.

Sortering, lägre gräns Vi kan se en sorteringsalgoritm som ett beslutsträd. Ställer frågor av typen: Är elementet på plats i mindre än elementet på plats j? Utfallen är permutationer (omordningar) av sekvensen som skall sorteras. 6

Sortering, lägre gräns (2) Hur många utfall har vi? => Antal permutationer. n = 2, t.ex. (a, b) a b b a Totalt 2 st n = 3, t.ex. (a, b, c) a b c b a c a c b b c a c b a c a b Totalt 6 st n = 4, t.ex. (a, b, c, d) a b c d a d b c b a c d b d a c a c b d a d c b b c a d b d c a c b a d c d b a c a b d c d a b a b d c d a b c b a d c d b a c a c d b d a c b b c d a d b c a c b d a d c b a c a d b d c a b Totalt 24 st n = 5, t.ex. (a, b, c, d, e) a b c d e b a c d e Totalt 120 st n element att sortera => n! permutatoner 7

Sortering, lägre gräns För godtycklig jämförande sorteringsalgoritm: n! möjliga svar => n! brett träd log(n!) högt träd log(n!) >= n log (n) (bevis: se boken) D.v.s. en jämförelsebaserad sorteringsalg behöver göra minst nlog(n) jämförelser! Alltså: algoritmer för jämförelsebaserad sortering är Ω(nlog(n))! 8

Count sort Strategi: Räkna hur många gånger varje tal förekommer Algoritm: 1. Dimensionera ett fält c efter värdet på största elementet som ska sorteras (N), sätt startvärde 0 på varje index 2. Gå igenom de osorterade siffrorna: För varje påträffat tal t, räkna upp siffran på c[t] med ett. 3. Gå igenom c: För varje index j i c, lägg till c[j] st av j i målfältet. 9 4 3 3 3 3 4 9 C: 0 0 0 12 0 10 0 0 0 0 10 0 1 2 3 4 5 6 7 8 9 9 N

Count sort(2) Analys: Räkna antal element av varje sort, lagra i arrayen: O(n) Fyll sekvensen med det antal element som anges i arrayen: O(n+N) T countsort = O(n) + O(n+N) = O(n+N) N = största elementet, n antal element Då N << n => O(n) Snabbare än den teoretiska gränsen??! Ja, men är ej en jämförelse-algoritm Kan bara sortera element i ett begränsat intervall 10

Bucket sort (Även kallad pigeonhole sort, bin sort. Definitionen varierar.) Algoritm: 1. Skapa lika många hinkar (buckets) som värdet på största elementet (+1 om 0 hör till nyckelmängden) 2. Lägg varje element i den hink vars index är samma som elementets värde 3. Med början vid hink 1 (index 0), ta ut alla elementen ur varje hink och placera dem efter varandra (3 ) (5 ) (3 ) (1 ) 0 1 2 3 4 5 11 (1 ) (3 ) (3) (5)

Bucket sort(2) Analys: Klarar även av att sortera värden där nycklar är associerade med data (jämför count sort) Stabil? Beror på.. Implementation?! Komplexitet? Beror på.. T skapa fält + T fyll hinkarna + T töm hinkarna = O(1) + O(n) + O(n+N) N = största elementet, n antal element Då N << n: O(n) (ej en jämförelse-algoritm) 12

Sammansatta nycklar Nycklar är inte nödvändigtvis heltal Kan bestå av delnycklar Exempel: Punkter i plan (2 delnycklar (x, y) ) Datum (3 delnycklar (år, månad, dag)) Strängar (varje tecken är en delnyckel) Objekt innehållandes namn, ålder, skostorlek, etc Lexiografisk ordning: Låt delnycklar ha olika signifikans I första hand gäller den första delnyckeln I andra hand gäller den andra delnyckeln Och så vidare.. 13

Radix sort Sortera data med flera delnycklar lexiografiskt Algoritm: Sortera varje delnyckel för sig med en stabil Bucketsort Minst eller mest signifikanta nyckel först? public static void radixsort(string[] a, int noofsubkeys){ for (int i = noofsubkeys-1; i >= 0; --i) { //bucket sort with respect to the i:th key } } 14

Radix sort(2) Analys: Antag d antal delnycklar, bucketsort utförs för varje delnyckel T radixsort (d, n, N) = O(d(n + N)) Antag även att N << n och d begränsad av en konstant T radixsort(d, n) =O(n) Stabil? Ja Slutbetraktelse: Kan generaliseras till att använda andra stabila sorteringsalgoritmer. T lexiographicsort = O(d * T(n)) 15

Jämförelse Allmänt Vi har studerat O(n 2 ) och O(nlog(n)) O(n 2 )-algoritmer kan vara bra i vissa fall Selectionsort Alltid O(n 2 ) alltid långsam, men endast n byten (värsta fall)! Insertionsort Bästa fall O(n), värsta fall O(n 2 ) Bra på små arrayer (<50) och där data är nästan sorterad Lätt att implementera 16

Jämförelse(2) Shellsort Utnyttjar insertionsorts bra sidor och försöker undvika de dåliga Tänjer på insertionsorts gränser Svår att analysera, beror på vald lucksekvens O(n 2 ), O(n 1.5 ), O(n 1.33 ), O(nlog(n)) Mergesort Optimal algoritm: O(nlog(n)) Kräver extra minne O(n) Ideal för sortering på externt minne färre diskåtkomster Quicksort I medelfallet snabbaste sorteringsalgoritmen O(nlog(n)) Vanlig i klassbibliotek (börjar dock ersättas av t.ex. Timsort) O(n 2 ) i värstafallet, använd ej i realtidsapplikationer 17

Jämförelse(3) Heapsort Mycket snabb - O(nlog(n)) I praktiken långsammare än Quicksort i medelfallet Bäst i värstafallet Bra för realtidsapplikationer! Countsort, Bucketsort Ej jämförande algoritmer Bra om nyckelmängden är liten och kan avbildas på heltal Snabbare än Quicksort och Heapsort, O(n) Radixsort Användbar när det finns delnycklar som måste respekteras I övrigt som Bucketsort 18

Utval Harry har fått i uppdrag att välja en ny kollega bland alla kandidater. Han får en lång, osorterad lista och uppmanas att välja den person som har tredje lägst löneanspråk (mer har de inte råd med). Lösning: 1. Sortera personerna i ett fält med en klokt vald sorteringsalgoritm 2. Returnera den n:te personen i fältet O(nlog(n)). Borde väl kunna gå snabbare? Observation: Att hitta det största/minsta värdet går på O(n)... 19

Quickselect Välj pivot Partitionera i tre delar L - elementen mindre än pivot E - pivot-elementet G - elementen större än pivot Partitionera igen med enn av partitionerna beroende på sökt i L (tredje minsta finns någonstans här) E G 20

Quickselect(2) Analys: Mycket lik Quicksort Går att implementera in-place och out-of-place Viktigt att välja bra pivotelement Värstafallet: O(n 2 ) Medelfallet: O(n) 21