Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avSara Lundgren
1
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 13 Sortering
2
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 20032 Innehåll Varför ska man sortera Sortering vs sorterad datatyp Stabilitet Grundprinciper för sortering Genomgång av några sorteringsalgoritmer Hur fort går det att sortera en lista med n tal?
3
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 20033 Sortering varför? Snabba upp andra algoritmer Sökning Hantera stora datamängder
4
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 20034 Sortering vs Sorterad datatyp Sortering förändrar ordningen mellan objekten i en struktur efter en sorteringordning (fallande, ökande) Sorterad datatyp De strukturförändrande operationerna i gränsytan (insert, delete) upprätthåller en sorteringsordning mellan de lagrade objekten
5
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 20035 Saker att beakta Absolut komplexitet Totala komplexiteten i alla implementationssteg oTabell->lista->dubbellänkad lista Passar en viss typ av sortering för en viss typ av implementation Ska man sortera och sedan söka eller osorterad plus linjer sökning
6
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 20036 Stabilitet Den inbördes relationen mellan två objekt med samma nyckel bibehålls vid sortering [(0,10),(2,3),(5,7),(8,0),(10,7) ] => [(8,0),(2,3),(5,7),(10,7),(0,10)] Alla sorteringsalgoritmer går inte att göra stabila!! Mer om detta senare…
7
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 20037 Olika grundprinciper Insticks – O(n 2 ) välj ut ett godtyckligt och sätt in det på rätt plats Urvals – O(n 2 ) välj ut det objekt som är på tur och sätt in det sist/först Utbytes – O(n*log(n)) byta plats på objekt som ligger fel inbördes Samsortering – O(n*log(n)) bygger på sammanslagning av redan sorterade strukturer Nyckelsortering – O(m+n)… kräver mer information/kunskap om objektmängden
8
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 20038 Mer principer… Naiva sorteringar - O(n 2 ) Insticks, urvals, och vissa utbytes ”Smarta” sorteringar - O(nlog(n)) Utbytes och samsorteringar Ännu smartare sorteringar - O(n+m)… Nyckelsorteringar…(nästa föreläsning)
9
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 20039 Bubbelsortering for i=1 to n-1 do for j=0 to n-1 do if (el[j] > el[j+1] do swap(el[j],el[j+1]) Stabil sortering? Tidskomplexiteten? O(n 2 )för en fältbaserad lista O(?)för en länkad lista?
10
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200310 Divide and Conquer Rekursiv algoritm princip Grund idén är att dela upp problemet i mindre och mindre problem Lös dom för basfallet Slå ihop till en totallösning Mergesort och Quicksort är av denna typ Men de jobbar lite annorlunda O(n*log(n))
11
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200311 Mergesort Algoritm Sortera sekvensen S Divide: Om S har 2 eller flera element dela S i två lika stora delsekvenser S1 och S2 Recurse: Sortera sekvenserna S1 och S2 rekursivt Conquer: Sätt tillbaka elementen i S genom att slå samman S1 och S2 till en sorterad sekvens
12
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200312 Analys av mergesort Mergesortträd Ta ett binärt träd T Varje nod i T representerar ett rekursivt anrop av mergesort Associera insekvensen för varje anrop med varje nod v i T Externa noder i T representerar varje enskilt element i ursprungssekvensen S
13
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200313 Exempel… Divide: Om S har 2 eller flera element dela S i två lika stora delsekvenser S1 och S2 Recurse: Sortera sekvenserna S1 och S2 rekursivt Conquer: Sätt tillbaka elementen i S genom att slå samman S1 och S2 till en sorterad sekvens
14
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200314 Ihopslagning av två sekvenser Agorithm merge(S1,S2,S) while S1 is not empty and S2 is not empty do if S1.first().element() ≤ S2.first().element() then S.insertLast(S1.remove(S1.first())) else S.insertLast(S2.remove(S2.first while S1 is not empty do S.insertLast(S1.remove(S1.first())) while S2 is not empty do S.insertLast(S2.remove(S2.first()))
15
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200315 3195715 S1 09267 S S2 319571509267 Exempel på sammanslagning Agorithm merge(S1,S2,S) while S1 is not empty and S2 is not empty do if S1.first().element() ≤ S2.first().element() then S.insertLast(S1.remove(S1.first())) else S.insertLast(S2.remove(S2.first while S1 is not empty do S.insertLast(S1.remove(S1.first())) while S2 is not empty do S.insertLast(S2.remove(S2.first()))
16
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200316 Analys av exekveringstiden Höjden på sorteringsträdet kopplat till sorteringen av en sekvens med n element blir log 2 (n) Antag att insättning och borttagning är av O(1) Tiden i varje nod i trädet exkluderat tiden för det rekursiva jobbet nedanför är O(n/2 i ) där i är djupet på noden ligger på, ty storleken på sekvensen är n/2 i Det är exakt 2 i noder på djupet i => totala tiden på djupet i i trädet är O(2 i n/2 i ) vilket är O(n) och höjden på trädet är log(n) Så den totala tidskomplexiteten är O(nlog(n))
17
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200317 Quicksort Algoritm Välj ut ett pivoelement Dela upp listan i tre delar Less, Equal, Greater Sortera Less och Greater rekursivt Slå ihop Less+Equal+Greater
18
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200318 Quicksort - val av pivoelement O(nlog(n) i bästa fallet Valet av pivoelement kritiskt Vill ha ett pivoelement som ligger i mitten Vid sned fördelning får man insticks/urvals sortering med O(n 2 ) Alternativ (eftersträvar en enkel tilldelning) oVälj första/sista, slumpmässigt oMedel/median mellan några stycken oStörsta av de två första som skiljer sig åt
19
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200319 Exempel… Algoritm Välj ut ett pivoelement (det första i listan) Dela upp listan i tre delar Less, Equal, Greater Sortera Less och Greater rekursivt Slå ihop Less+Equal+Greater
20
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200320 Analys av Quicksort Lurad….detta är ju lab 3 :-), Men medelfallet ligger nära bästa fallet och värsta fallet inträffar förhoppningsvis inte så ofta…. Slumpa ett pivoelement borde ge bra tidskomplexitet
21
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200321 Inplace variant av quicksort Algoritm Traversera parallellt från båda hållen i S, gå bakåt från början av S tills man hittar ett element som är >= PE, traversera från slutet mot början till man hittar ett element som är < PE Skifta plats på dessa två element Upprepa till traverseringarna mötes Skifta in PE på rätt plats Rekursivt anropa på Less och Greater
22
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200322 Exempel… 319571509267 LRR
23
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200323 Hur snabbt kan man sortera? Jämförelsebaserad sortering Ω(nlog(n)) undre gräns Nyckelsortering snabbare… Nästa föreläsning
24
Datastrukturer och algoritmer VT 2003 © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 200324 Ω(nlog(n)) – bevis… Exekveringstiden för en jämförelsebaserad sortering måste vara lika med eller större än djupet på det besluts träd som är associerad med algoritmen Varje nod i detta träd är kopplat till en jämförelse som bestämmer ordning mellan två element i S Därav, varje extern nod i T representerar en unik permutation av elementen i S, och det måste finnas n! noder i T, och höjden är log(n!) Eftersom n! Har åtminstone n/2 termer som är större än eller lika med n/2 => log(n!) = log(n/2)n/2= (n/2)log(n/2) => Ω(nlog(n))
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.