Sortering: TDDE22, 725G97: DALG. Magnus Nielsen

Relevanta dokument
Magnus Nielsen, IDA, Linköpings universitet

Tommy Färnqvist, IDA, Linköpings universitet

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

Föreläsning 11 Datastrukturer (DAT037)

Föreläsning 9. Sortering

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

Föreläsning 11 Innehåll

Vad har vi pratat om i kursen?

Sökning och sortering

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

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

Algoritmer, datastrukturer och komplexitet

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

Algoritmer, datastrukturer och komplexitet

Föreläsning 12 Innehåll

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

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

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

Föreläsning 12 Innehåll

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

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

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Teoretisk del. Facit Tentamen TDDC (6)

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

Föreläsning 5 Innehåll

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

Lösningar Datastrukturer TDA

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

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

Tentamen Datastrukturer D DAT 036/INN960

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

Några svar till TDDC70/91 Datastrukturer och algoritmer

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

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

SORTERING OCH SÖKNING

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

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

Tentamen Datastrukturer D DAT 036/INN960

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

Teoretisk del. Facit Tentamen TDDC (6)

Föreläsning 13 Innehåll

Datastrukturer D. Föreläsning 2

Träd Hierarkiska strukturer

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

Föreläsning 1: Dekomposition, giriga algoritmer och dynamisk programmering

Föreläsning Datastrukturer (DAT037)

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

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

Sökning och sortering. Sökning och sortering - definitioner. Sökning i oordnad lista. Sökning med vaktpost i oordnad lista

Sökning och sortering

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

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

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

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

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

Datastrukturer och algoritmer

Föreläsning 2 Datastrukturer (DAT037)

Tentamen Datastrukturer för D2 DAT 035

Tommy Färnqvist, IDA, Linköpings universitet

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

Problemlösning och algoritmer

Facit Tentamen TDDC (7)

TDDI16 Datastrukturer och algoritmer Övningsuppgifter hösten 2014

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

TDDC Terminologi Uppdaterad Fö #1

Rekursion och induktion för algoritmkonstruktion

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 13. Rekursion

Seminarium 13 Innehåll

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

Kapitel 7: Analys av sorteringsalgoritmer

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

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

Medan ni väntar. 2. Skriv metoden. 3. Skriv metoden. Naturligtvis rekursivt och utan användning av Javas standardmetoder.

Algoritmer och datastrukturer TDA143

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 4 Datastrukturer (DAT037)

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

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

Tentamen i Algoritmer & Datastrukturer i Java

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

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

Datastrukturer och algoritmer

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

13 Prioritetsköer, heapar

Datastrukturer. föreläsning 2

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

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

Föreläsning 13 Datastrukturer (DAT037)

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

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

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

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Facit Tentamen TDDC kl (6)

TDDC70/TDDC91 Datastrukturer och algoritmer Övningsuppgifter hösten 2013

Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer

Transkript:

Sortering: TDDE22, 725G97: DALG Magnus Nielsen

1 Sortering Introduktion Nybörjarsortering Insättningssortering Urvalssortering Divide-and-conquer Quick-sort

Föreläsning 7 Magnus Nielsen 18 september 2020 2 Sorteringsproblemet Indata: En lista L innehållande data med nycklar från en linjärt ordnad mängd K Utdata: En lista L innehållande samma data sorterat i stigande ordning m.a.p. nycklarna Exempel [8, 2, 9, 4, 6, 10, 1, 4] [1, 2, 4, 4, 6, 8, 9, 10]

Föreläsning 7 Magnus Nielsen 18 september 2020 3 Varför sortera? Varför vill vi sortera data? Underlätta sökning i stora datamängder Presentera data i ett lätthanterligt format

Föreläsning 7 Magnus Nielsen 18 september 2020 3 Varför sortera? Varför vill vi sortera data? Underlätta sökning i stora datamängder Presentera data i ett lätthanterligt format Underlätta problemlösning.

Föreläsning 7 Magnus Nielsen 18 september 2020 4 Exempelproblem Du och en grupp vänner har startat en onlinebutik. I er webbserver har ni en (osorterad) länkad lista med alla era 10 miljoner artiklar. På ett styrelsemöte kommer ni fram till att ni vill se över era 1000 dyraste artiklar. Ni har två val: 1. Sök igenom listan 1000 gånger (tidskomplexitet O(n)). 2. Konvertera den länkade listan till en array (tidskomplexitet O(n)), sortera arrayen (tidskomplexitet O(n log n)) och sedan hämta ut de 1000 dyraste artiklarna? Vilket val gör ni, och varför? Vi kan avfärda tiden det tar att plocka fram ett data ur arrayen.

Föreläsning 7 Magnus Nielsen 18 september 2020 5 Svar Vi räknar lite: 1. Vi har 10 7 element, och ska göra 1000 fullständiga traverseringar av listan. Det ger oss ungefär 1000 10 7 = 10 10 = 10miljarder operationer 2. Konverteringen kostar oss ca 10 7 operationer. I datavetenskapen refererar logaritmuttrycket till bas 2 logaritmer. Vi har då: 10 7 log 2 (10 7 ) 2.3 10 8 operationer för att sortera arrayen. Uppskattat antal operationer blir ungefär: 2.3 10 8 + 10 7 = 240miljoner. Anledningen till att vi kan bortse från kostnaden för att plocka fram de 1000 största (dyraste) elementen i arrayen är att de kommer vara från slutet av arrayen, och således behöver vi göra 1000 triviala operationer för att plocka fram dem. 1000 triviala operationer är försumbara i sammanhanget. Vad har vi lärt oss?

Föreläsning 7 Magnus Nielsen 18 september 2020 5 Svar Vi räknar lite: 1. Vi har 10 7 element, och ska göra 1000 fullständiga traverseringar av listan. Det ger oss ungefär 1000 10 7 = 10 10 = 10miljarder operationer 2. Konverteringen kostar oss ca 10 7 operationer. I datavetenskapen refererar logaritmuttrycket till bas 2 logaritmer. Vi har då: 10 7 log 2 (10 7 ) 2.3 10 8 operationer för att sortera arrayen. Uppskattat antal operationer blir ungefär: 2.3 10 8 + 10 7 = 240miljoner. Anledningen till att vi kan bortse från kostnaden för att plocka fram de 1000 största (dyraste) elementen i arrayen är att de kommer vara från slutet av arrayen, och således behöver vi göra 1000 triviala operationer för att plocka fram dem. 1000 triviala operationer är försumbara i sammanhanget. Vad har vi lärt oss? Att inte bara stirra oss blinda på tidskomplexitet. Vi måste även fundera över hur vi ämnar använda oss av det vi undersöker. Dessutom har vi lärt oss att sortering är superhäftigt.

Föreläsning 7 Magnus Nielsen 18 september 2020 6 Varför så många algoritmer? Olika typer av indata som ska sorteras Olika grader av sortering redan gjord Olika storlekar på indata Olika förutsättningar / syfte för programmet som utför sorteringen

Föreläsning 7 Magnus Nielsen 18 september 2020 7 Aspekter på sortering In-place vs använda extra minne Internt vs externt minne Stabil vs icke stabil Jämförelsebaserad vs digital

Strategier Sortering genom insättning Titta efter rätt plats att sätta in varje nytt element som ska läggas till i den sorterade sekvensen linjär insättning, Shell-sort, Sortering genom urval Sök i varje iteration i den osorterade sekvensen efter det minsta kvarvarande datat och lägg det till slutet av den sorterade sekvensen rakt urval, Heap-sort, Sortering genom platsbyten Sök fram och tillbaka i något mönster och byt plats på par i fel inbördes ordning så fort ett sådant upptäcks Quick-sort, Merge-sort, Bubble-sort

Föreläsning 7 Magnus Nielsen 18 september 2020 9 Bubble sort Börja från första index, bubbla fram till sista index, eller vice versa. Upprepa lika många gånger som det finns index, I varje varv bubblas största (eller sjunker minsta, beroende på implementation) kvarvarande elementet till sin rätta plats. Kan effektiviseras lite: exempelvis genom att bubbla ett steg kortare varje varv.

Föreläsning 7 Magnus Nielsen 18 september 2020 10 (Linjär) insättningssortering Algoritmen är in-place! Dela arrayen som ska sorteras A[0,..., n 1] i två delar A[0,..., i 1] som är sorterad A[i,..., n 1] ej ännu sorterad Initialt är i = 1, i vilket fall A[0,..., 0] (trivialt) är sorterad procedure InsertionSort(A[0,..., n 1]) for i = 1 to n 1 do sätt in A[i] i rätt (=sorterad) position i A[0,..., i 1]

Föreläsning 7 Magnus Nielsen 18 september 2020 11 Insertion sort Utgå från andra positionen (första positionen är redan sorterad ) Är nyckeln på denna position mindre än nyckeln på föregående position? Om så är fallet: byt plats på dem (swap) och fortsätt mot början av den sorterade delen Om så ej är fallet: den sorterade delen är sorterad Utgå från nästa position Upprepa för resten av den osorterade mängden

Exempel: Visualisering av Insertion-sort 1 2 3 4

Värstafallsanalys av Insertion-sort 1: procedure InsertionSort(A[0,..., n 1]) 2: for i = 1 to n 1 do 3: inner i; x A[i] 4: while inner 1 and A[inner 1] > x do 5: A[inner] A[inner 1]; inner inner 1 6: A[inner] x

Värstafallsanalys av Insertion-sort 1: procedure InsertionSort(A[0,..., n 1]) 2: for i = 1 to n 1 do 3: inner i; x A[i] 4: while inner 1 and A[inner 1] > x do 5: A[inner] A[inner 1]; inner inner 1 6: A[inner] x rad 2 : n 1 pass rad 3 : n 1 pass rad 4 : Låt I vara antalet iterationer i värsta fallet av innerloopen: I = 1 + 2 +... + (n 1) = n(n 1)/2 = (n 2 n)/2 rad 5 : I pass rad 6 : n 1 pass Totalt: rad 2 +rad 3 +rad 4 +rad 5 +rad 6 = 3(n 1)+(n 2 n) = n 2 +2n 3 Alltså O(n 2 ) i värsta fallet men bra om sekvensen nästan sorterad

Föreläsning 7 Magnus Nielsen 18 september 2020 14 (Rak) urvalssortering Algoritmen är in-place! Dela arrayen som ska sorteras A[0,..., n 1] i två delar A[0,..., i 1] som är sorterad (alla element mindre än eller lika med A[i,..., n 1]) A[i,..., n 1] ej ännu sorterad Initialt är i = 0, d.v.s. den sorterade delen är tom (och trivialt sorterad) procedure SelectionSort(A[0,..., n 1]) for i = 0 to n 2 do hitta ett minimalt element A[j] i A[i,..., n 1] byt plats på A[i] och A[j]

Föreläsning 7 Magnus Nielsen 18 september 2020 15 Selection sort Utgå från första positionen Hitta minsta elementet i mängden, och swappa till den position vi utgår ifrån Utgå från nästa plats Upprepa för resten av mängden, lika många gånger som det finns platser

Exempel: Visualisering av Selection-sort 1 2 3 4

Föreläsning 7 Magnus Nielsen 18 september 2020 17 Värstafallsanalys av Selection-sort 1: procedure SelectionSort(A[0,..., n 1]) 2: for i = 0 to n 2 do 3: s i 4: for j i + 1 to n 1 do 5: if A[j] < A[s] then s j 6: swap(a[i], A[s])

Föreläsning 7 Magnus Nielsen 18 september 2020 17 Värstafallsanalys av Selection-sort 1: procedure SelectionSort(A[0,..., n 1]) 2: for i = 0 to n 2 do 3: s i 4: for j i + 1 to n 1 do 5: if A[j] < A[s] then s j 6: swap(a[i], A[s]) rad 2 : n 1 pass rad 3 : n 1 pass rad 4 : Låt I vara antalet iterationer i värsta fallet av innerloopen: I = (n 2) + (n 3) +... + 1 = (n 1)(n 2)/2 = (n 2 3n + 2)/2 rad 5 : I pass rad 6 : n 1 pass Totalt: rad 2 + rad 3 + rad 4 + rad 5 + rad 6 = 3(n 1) + (n 2 3n + 2) = n 2 1 O(n 2 )

Föreläsning 7 Magnus Nielsen 18 september 2020 18 Principen söndra-och-härska för algoritmkonstruktion söndra: dela upp problemet i mindre, oberoende, delproblem härska: lös delproblemen rekursivt (eller direkt om trivialt) kombinera lösningarna till delproblemen till en lösning till ursprungsproblemet Typexempel: Merge-Sort Eng. divide-and-conquer

Exempel: Söndra-och-härska 4 10 6 8 12 7 9 1 5 8 13 2 5 1620 3 4 10 6 8 12 7 9 1 5 8 13 2 5 1620 3 4 10 6 8 12 7 9 1 5 8 13 2 5 1620 3 4 10 6 8 12 7 9 1 5 8 13 2 5 16 20 3 4 10 6 8 7 12 1 9 5 8 2 13 5 16 3 20 4 6 8 10 1 7 9 12 2 5 8 13 3 5 1620 1 4 6 7 8 9 1012 2 3 5 5 8 131620 1 2 3 4 5 5 6 7 8 8 9 1012131620

Exempel: Söndra-och-härska 4 10 6 8 12 7 9 1 5 8 13 2 5 1620 3 4 6 7 1 5 2 5 3 10 8 12 9 8 131620 4 1 2 3 6 7 5 5 10 8 9 8 12131620 1 2 4 3 5 5 6 7 8 8 10 9 1213 1620 1 2 3 4 5 5 6 7 8 8 9 10 1213 1620 1 2 3 4 5 5 6 7 8 8 9 10 12131620 1 2 3 4 5 5 6 7 8 8 9 1012131620 1 2 3 4 5 5 6 7 8 8 9 1012131620

Quick-sort Quick-sort är en randomiserad sorteringsalgoritm baserad på paradigmet söndra-och-härska söndra: välj slumpvist (eller enligt en algoritm) ett element x (kallat pivot) och x partitionera Seq till Less element mindre än x Eq element lika med x L x E G Grt element större än x härska: sortera Less och Grt x kombinera Less, Eq och Grt

Föreläsning 7 Magnus Nielsen 18 september 2020 22 Val av pivot-element Många olika sätt att välja pivot-element: Slumpa ett pivot-element Elementet längst till höger eller vänster Medianen av tre (ex: vänster, mitten och höger) etc

Föreläsning 7 Magnus Nielsen 18 september 2020 23 Partitionering Vi partitionerar indatasekvensen på följande vis: Vi tar bort, i tur och ordning, varje element y från Seq och Vi sätter in y i Less, Eq eller Grt beroende på resultatet av jämförelsen med pivot-elementet x Varje insättning och borttagning är i början eller slutet av en sekvens och tar alltså O(1) tid Alltså tar partitioneringssteget i quick-sort O(n) tid

Föreläsning 7 Magnus Nielsen 18 september 2020 24 Partitionering function partition(seq, pivot) Less, Eq, Grt tomma sekvenser x Seq.remove(pivot) while Seq.isEmpty() do y Seq.remove(Seq.first()) if y < x then Less.insertLast(y) else if y = x then Eq.insertLast(y) else Grt.insertLast(y) return Less, Eq, Grt

Quick-sortträdet Exekveringen av quick-sort kan visualiseras som ett binärt träd Varje nod representerar ett rekursivt anrop till quick-sort och lagrar Osorterad sekvens före exekveringen och dess pivot Sorterad sekvens efter exekveringen Roten är ursprungsanropet Löven är anrop på delsekvenser av storlek 0 eller 1 7 4 9 6 2 2 4 6 7 9 4 2 2 4 7 9 7 9 2 2 9 9

Föreläsning 7 Magnus Nielsen 18 september 2020 26 Exempel: Exekvering av quick-sort Val av pivot 7 2 9 4 3 7 6 1 1 2 3 4 6 7 8 9 7 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6 2 2 9 4 4 9 3 8 8 9 9 4 4

Föreläsning 7 Magnus Nielsen 18 september 2020 27 Exempel: Exekvering av quick-sort Partitionering, rekursivt anrop, val av pivot 7 2 9 4 3 7 6 1 1 2 3 4 6 7 8 9 2 4 3 1 2 4 7 9 3 8 6 1 1 3 8 6 2 2 9 3 8 8 9 9 4 4

Föreläsning 7 Magnus Nielsen 18 september 2020 28 Exempel: Exekvering av quick-sort Partitionering, rekursivt anrop, basfall 7 2 9 4 3 7 6 1 1 2 3 4 6 7 8 9 2 4 3 1 2 4 7 3 8 6 1 1 3 8 6 1 1 3 8 8 9 9 4 4

Föreläsning 7 Magnus Nielsen 18 september 2020 29 Exempel: Exekvering av quick-sort Rekursivt anrop,, basfall, kombinera 7 2 9 4 3 7 6 1 1 2 3 4 6 7 8 9 2 4 3 1 1 2 3 4 3 8 6 1 1 3 8 6 1 1 4 3 3 4 3 8 8 9 9 4 4

Föreläsning 7 Magnus Nielsen 18 september 2020 30 Exempel: Exekvering av quick-sort Rekursivt anrop, val av pivot

Föreläsning 7 Magnus Nielsen 18 september 2020 31 Exempel: Exekvering av quick-sort Partitionering,, rekursivt anrop, basfall 7 2 9 4 3 7 6 1 1 2 3 4 6 7 8 9 2 4 3 1 1 2 3 4 7 9 7 1 1 3 8 6 1 1 4 3 3 4 8 9 9 9 9 4 4

Föreläsning 7 Magnus Nielsen 18 september 2020 32 Exempel: Exekvering av quick-sort Kombinera, kombinera 7 2 9 4 3 7 6 1 1 2 3 4 6 7 7 9 2 4 3 1 1 2 3 4 7 9 7 17 7 9 1 1 4 3 3 4 8 9 9 9 9 4 4

Föreläsning 7 Magnus Nielsen 18 september 2020 33 Exekveringstid i värsta fallet Värsta fallet för quick-sort uppkommer när pivotelementet är ett unikt minimalt eller maximalt element en av L eller G har storlek n 1 och den andra har storlek 0 Exekveringstiden blir proportionell mot summan n + (n 1) +... + 2 + 1 Alltså, värstafallstiden för quick-sort är O(n 2 )

Föreläsning 7 Magnus Nielsen 18 september 2020 34 Exekveringstid i värsta fallet djup 0 1 tid n n-1 n-1 1

Nästa gång: Mer sortering... www.liu.se