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

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 7 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

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

Magnus Nielsen, IDA, Linköpings universitet

Föreläsning 11 Datastrukturer (DAT037)

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 11 Innehåll

Sökning och sortering

Föreläsning 9. Sortering

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

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

SORTERING OCH SÖKNING

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

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ö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

Föreläsning 12 Innehåll

Teoretisk del. Facit Tentamen TDDC (6)

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 2 Datastrukturer (DAT037)

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

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

Facit Tentamen TDDC kl (6)

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 12 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 13 Innehåll

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

TDDC Terminologi Uppdaterad Fö #1

Teoretisk del. Facit Tentamen TDDC (6)

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

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

Seminarium 13 Innehåll

Facit Tentamen TDDC (7)

Algoritmer. Två gränssnitt

Tentamen Datastrukturer D DAT 036/INN960

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

Sökning och sortering. Linda Mannila

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

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

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Datastrukturer D. Föreläsning 2

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

Föreläsning 4 Datastrukturer (DAT037)

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

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

Objektorienterad programmering Föreläsning 10. Copyright Mahmud Al Hakim Sorteringsalgoritmer

Vad har vi pratat om i kursen?

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

Tentamen Datastrukturer D DAT 036/INN960

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

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

Tentamen Datastrukturer D DAT 036/DIT960

Föreläsning 4 Datastrukturer (DAT037)

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

Föreläsning Datastrukturer (DAT037)

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

Datastrukturer och algoritmer

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

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

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

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

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

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

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

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

Föreläsning 1 Datastrukturer (DAT037)

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

ID1020:Enkel Sortering

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

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

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

Föreläsning 5 Innehåll

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

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

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

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

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

Föreläsning REPETITION & EXTENTA

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

Föreläsning 12. Söndra och härska

Föreläsning 13. Rekursion

Problemlösning och algoritmer

Föreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek

Övningsuppgifter #11, Programkonstruktion och datastrukturer

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen kl Uppgift 4. Uppgift 5

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

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

Datastrukturer och algoritmer

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

Tentamen Datastrukturer för D2 DAT 035

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

Föreläsning 13 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT037)

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Föreläsning 2 Datastrukturer (DAT037)

TDDC30 Programmering i Java, datastrukturer och algoritmer

Transkript:

TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 6 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Sortering Selectionsort, Bubblesort, Shakersort, Insertionsort Shellsort, Mergesort, Quicksort 1

Sortering - Motivering Varför? 25% av datorns CPU-cykler spenderas på sortering Vanligt att ADT innehåller sorterade datastrukturer Bra som fallstudie för algoritmanalys 2

Initiala problem Sortera ökande eller minskande? Svar: Enkelt problem, lätt att ändra algoritmen efteråt (byt ut < mot > ) Hur ska lika element hanteras? Går det bra att lika element byter plats? En stabil algoritm defineras som en som inte kommer att ha bytt inbördes plats mellan lika element efter sortering. Hur sorterar man bokstäver, djur, etc? Svar: Implementera interfacet Comparable<E>, som innehåller en compareto-metod. 3

Sorteringsstrategier Insertion sorts (hitta rätt plats för ett element) Linear insertion Shell sort... Selection sorts (hitta rätt element för en plats) Straight selection Heap sort... Exchange sorts (byt plats på element som ligger fel) Quick Sort Merge sort... 4

Selection sort Strategi: I varje iteration, sök efter det minsta elementet i den osorterade mängden, och lägg till elementet i slutet av den sorterade mängden. Naiv lösning ( rak selectionsort ) Dela upp arrayen i en sorterad och osorterad del Leta upp det minsta elementet i den osorterade delen och lägg sist i den sorterade Upprepa 5

Selection sort(2) Implementation exempel void selectionsort(int[] a){ for (int i = 0; i < a.length-1; ++i) { int x = i; for (int j = i+1; j < a.length; ++j) { if (a[j] < a[x]) { x = j; } } byt plats på a[i] och a[x]; } } n n 2 Asymptotisk (tids)komplexitet? Stabil? O(n 2 ) Nej 6

Bubblesort Jämför med närliggande element Start från höga index void bubblesort(int[] a) { for (int i = 0; i < a.length; ++i) { for (int j = a.length-1; j > i; --j){ if (a[j] < a[j-1]) { byt plats på a[j] och a[j-1]; } } } } n n 2 Asymptotisk (tids)komplexitet? Stabil? O(n 2 ) Ja 7

Shakersort Tvåvägs bubblesort Små element bubblar upp Stora element sjunker ner Fram och tillbaka Jämför med närliggande element Bubbla ner eller bubbla upp Gör om för varje element O(n) O(n) T shakersort? Stabil? O(n 2 ) Ja 8

Insertionsort Strategi: Dela upp arrayen en en sorterad och en osorterad del Lägg successivt in varje osorterat element på rätt plats i den sorterade delen. Algoritm Ta ut det första elementet i den osorterade delen Skjut på de element i den sorterade delen som är större än det uttagna ett steg uppåt Sätt in elementet på den nu tomma platsen T insertionsort? Stabil? O(n 2 ) Ja 9

Shell sort Generaliserad insertionsort Strategi: Välj ett lucktal N och låt n vara 0. 1. Markera vart (N+n):te element i listan och sortera dessa inbördes med insertion sort. 2. Öka n med ett och upprepa (1) tills n = N. 3. Minska N, låt n vara 0 och upprepa (1), (2) tills N < 1 Noteringar: Börja med ett stort N, upp till size/2 Att börja med N = 1 => Vanlig insertionsort 10

Shell sort(2) Val av lucksekvens N i Hibbards [ 1, 3, 7,..., 2 k -1 ] Knuths: [ 1, 4, 13,..., (3 k -1)/2 ] Gonnets: Dividera N med 2.2 stegvis, avrunda nedåt, se till att den sista blir 1, ex. n=100: [ 1, 4, 9, 20, 45 ] T shellsort? Stabil? Svårt, beror på lucksekvensen. Ej sämre än O(n 2 ) Nej 11

Merge Sort Strategi: Divide and conquer : Tag två sorterade delmängder och sortera ihop dessa. Algoritm: Då mängen innehåller 0 eller 1 element: Redan sorterad Annars: Dela upp mängden i två lika stora delar och sortera dessa Sortera ihop dessa två delar (en. Merge) 12

Merge Sort(2) Utnyttjar att det krävs få jämförelser att sortera små mängder Fördel: Bästafallet: linjär (om man utnyttjar naturliga följder) Vanlig optimering: Byt ut sorteringsalgoritmen när delmängden är tillräckligt liten! Komplexitet: Antal uppdelningar av arrayen Sortering på varje nivå O(log(n)) O(n) T mergesort = O(log(n)) * O(n) = O(nlog(n)) R mergesort = O(n) (O(1) möjlig men impl. ger dålig prestanda) Stabil? Ja (om sammanslagningsalgoritmen är väl vald) 13

Quick Sort Strategi: Divide and conquer : Välj ut ett element p, pivotelementet, och flytta åt sidan. Placera alla element < p till vänster i fältet, alla element > p till höger. Flytta in pivotelementet där den högra och vänstra delen möts Upprepa detta (rekursivt) på vänstra och högra delen. T quicksort = O(n 2 ) MEN Medelfallet nästan lika med bästafallet Ω(nlog(n))! Fördel: Jämför tal nära varandra. Bra när datamängden är mycket stor (för mer info, läs om cache-minnen!) 14

Quick Sort(2) Val av pivotelement Pivotelementet kan väljas godtyckligt men ju bättre val, desto jämnare uppdelning mellan höger och vänster Elementet längst till höger (ligger redan åt sidan ) Slumpa ett element (hoppas att det blir lagom ) Median av tre element (större chans att det blir lagom ) 15

Sammanfattning Kvadratiska algoritmer Selectionsort Shakersort Insertionsort Mer avancerade algoritmer Shellsort Mergesort Quicksort Enkla, långsamma Komplexa, snabba 16