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



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

Föreläsning 11 Datastrukturer (DAT037)

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

Några saker till och lite om snabbare sortering

Föreläsning 11 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

Sökning och sortering

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

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 12 Innehåll

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

Tentamen kl Uppgift 4. Uppgift 5

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

Problemlösning och algoritmer

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

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

Algoritmer, datastrukturer och komplexitet

Föreläsning 9. Sortering

Magnus Nielsen, IDA, Linköpings universitet

Algoritmer, datastrukturer och komplexitet

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.

Grundläggande datalogi - Övning 4

Tentamen Datastrukturer D DAT 036/INN960

Tommy Färnqvist, IDA, Linköpings universitet

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

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

SORTERING OCH SÖKNING

Föreläsning 1. Introduktion och sökning i graf. Vad är en algoritm?

Föreläsning 13. Rekursion

Problemlösning och funktioner Grundkurs i programmering med Python

Sätt att skriva ut binärträd

Fredag 10 juni 2016 kl 8 12

Kapitel 7: Analys av sorteringsalgoritmer

Exempeltenta GruDat 2002/2003

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

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

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

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

GOTO och lägen. Några saker till och lite om snabbare sortering. GOTO och lägen (3) GOTO och lägen (2)

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

Några saker till och lite om snabbare sortering

Föreläsning 13 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 036/INN960

Föreläsning 13 Datastrukturer (DAT037)

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037)

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Måndag 13 mars 2017 kl Rita en KMP-automat för CAMCORDERCAMERA samt ange next-vektorn.

Optimering Kruskal s algoritm Prim-Jarník s algoritm

Lösning av några vanliga rekurrensekvationer

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

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Lösningar Datastrukturer TDA

Vad har vi pratat om i kursen?

Föreläsning 5 Innehåll

Tentamen Datastrukturer D DAT 035/INN960

DAI2 (TIDAL) + I2 (TKIEK)

Datastrukturer D. Föreläsning 2

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

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

Konvexa höljet Laboration 6 GruDat, DD1344

Lösningsförslag till tentamen Datastrukturer, DAT037,

Lösningsförslag till tentamen Datastrukturer, DAT037,

Algoritmer. Två gränssnitt

Sökning. Viktiga algoritmer sökning och sortering. Sökning i en oordnad tabell:

Föreläsning Datastrukturer (DAT037)

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

Tentamen Datastrukturer D DAT 035/INN960

Datastrukturer och algoritmer

Seminarium 13 Innehåll

Övning 4. Hashning, sortering, prioritetskö, bästaförstsökning. Hitta på en perfekt hashfunktion för atomer. Hur stor blir hashtabellen?

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

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

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

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

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

Programmering II (ID1019) :00-11:00

KTH, NADA, Vahid Mosavat. 1. Flervalsfrågor (5p)

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

Föreläsning 3: Dekomposition. Dekomposition

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

Sökning och sortering. Linda Mannila

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

Föreläsning 13 Innehåll

Tentamen Datastrukturer (DAT037)

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Grundläggande Datalogi

Grundläggande Datalogi för F

Rekursion. Rekursiv lösningsstrategi. Algoritmkonstruktion. Exempelproblem Hitta största elementet i en sekvens v i där i 1... n.

Föreläsning 4 Datastrukturer (DAT037)

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

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

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

Övningsuppgifter #11, Programkonstruktion och datastrukturer

Övning 2. (Länkade) Listor, noder

Tentamen: Programutveckling ht 2015

Översikt. Effektiva algoritmer. En telefonlista. Algoritm

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

Transkript:

Sortering Brute-force Sortering Ordna element enligt relation mellan nyckelvärden Flera olika algoritmer med olika fördelar Brute-force Gå igenom alla permutationer och hitta den där elementen ligger i ordning O(n!), orimligt ineffektivt

Byt plats på element som ligger i fel ordning Upprepa detta tills alla ligger rätt def b u b b l e S o r t ( v ) : while m o d i f i e d : m o d i f i e d = F a l s e f o r i i n range ( 1, l e n ( v ) ) : i f v [ i 1] > v [ i ] : v [ i 1], v [ i ] = v [ i ], v [ i 1] return v Fiffigare def b u b b l e S o r t ( v ) : s u r f a c e = l e n ( v ) while m o d i f i e d : m o d i f i e d = F a l s e f o r i i n range ( 1, s u r f a c e ) : i f v [ i 1] > v [ i ] : v [ i 1], v [ i ] = v [ i ], v [ i 1] s u r f a c e = 1 Hur lång tid tar bubbelsortering? while for Komplexitet: O(n 2 )

Rekursiv ansats Tag bort ett element Sortera resten Insättingssortering def i n s e r t i o n S o r t ( v ) : x = v [ 0 ] a = i n s e r t i o n S o r t ( v [ 1 : ] ) Sätt in det borttagna på rätt plats p = 0 while p<l e n ( a ) and x>a [ p ] : p += 1 a. i n s e r t ( p, x ) return a Alternativ rekursiv ansats Tag bort största element Sortera resten Sätt in det borttagna sist def s e l e c t i o n S o r t ( v ) : im, m = 0, v [ 0 ] f o r i x, x i n enumerate ( v ) : i f x>m: im, m = ix, x del v [ im ] return s e l e c t i o n S o r t ( v )+[m]

O(n 2 ) O(n 2 ) Urvalsortering O(n 2 ) Smartare rekursiv ansats Dela på mitten Sortera båda delarna Sätt samman (Mergesort), hjälpfunktion def mergesort ( v ) : a = mergesort ( v [ : l e n ( v ) / / 2 ] ) b = mergesort ( v [ l e n ( v ) / / 2 : ] ) return merge ( a, b ) def merge ( a, b ) : v = [ ] while a and b : i f a [ 0 ] < b [ 0 ] : v. append ( a. pop ( 0 ) ) e l s e : v. append ( b. pop ( 0 ) ) while a : v. append ( a. pop ( 0 ) ) while b : v. append ( b. pop ( 0 ) )

Quicksort Hur lång tid tar samsortering? n element Ännu en rekursiv ansats Välj ett element log n Lägg de som är mindre till vänster och de som är större till höger Sortera delarna Quicksort Komplexitet: O(n log n) Nackdel: Kräver extra utrymme Quicksort Quicksort def q u i c k S o r t ( v ) : p = v [ 0 ] s m a l l = [ x f o r x i n v [ 1 : ] i f x<=p ] l a r g e = [ x f o r x i n v [ 1 : ] i f x>p ] return q u i c k S o r t ( s m a l l ) + \ [ p ] + \ q u i c k S o r t ( l a r g e ) Hur lång tid tar quicksort? Medelfallet: O(n log n) Värsta fall: O(n 2 ) Kan göras utan extra minne (in-place)

Quicksort, del 2 Quicksort, in place def q u i c k S o r t ( v, a, b ) : i f b>a : s = p a r t i t i o n ( v, a, b ) q u i c k S o r t ( v, a, s ) q u i c k S o r t ( v, s +1, b ) def p a r t i t i o n ( v, a, b ) : p = v [ a ] l e f t = a+1 r i g h t = b 1 while l e f t <=r i g h t : while l e f t <=r i g h t and v [ l e f t ] <= p : l e f t += 1 while l e f t <=r i g h t and v [ r i g h t ] > p : r i g h t = 1 i f l e f t <r i g h t : v [ l e f t ], v [ r i g h t ] = v [ r i g h t ], v [ l e f t ] v [ a ], v [ r i g h t ] = v [ r i g h t ], v [ a ] return r i g h t Kan man sortera snabbare än O(n log n)? Sortering välj rätt permutation Antal tänkbara permutationer: n! Varje jämförelse kan som bäst halvera antalet n! 2 m = 1 m = log 2 (n!) jämförelser krävs ( n 3 ) n < n! < ( n 2 ) n O(log n!) O(n log n)