Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

INF 295 Forelesning 20 - Kapittel 7 Boble-, innstikk-, Shell-, Heap-, Quick-, Mergesortering Hans Fr. Nordhaug (Ola Bø)

Liknende presentasjoner


Presentasjon om: "INF 295 Forelesning 20 - Kapittel 7 Boble-, innstikk-, Shell-, Heap-, Quick-, Mergesortering Hans Fr. Nordhaug (Ola Bø)"— Utskrift av presentasjonen:

1 INF 295 Forelesning 20 - Kapittel 7 Boble-, innstikk-, Shell-, Heap-, Quick-, Mergesortering Hans Fr. Nordhaug (Ola Bø)

2 Sortering Sortering av array - intern sortering Ekstern sortering nødvendig ved store datamengder Kjøretider intern sortering Flere enkle algoritmer O(N 2 ) Shellsort o(N 2 ) svært rask i praksis Mer kompliserte algoritmer O(NlogN) Alle generelle sorteringsalgoritmer krever minst Ω(NlogN) sammenligninger Gir ideer til kodeoptimering og algoritmedesign

3 Innledning De beskrevne algoritmene er utskiftbare Alle motar N elementer som skal sorteres i en array Elementene som skal sorteres implementerer Comparable compareTo() brukes for ordne elementene i en definert rekkefølge Slik sortering kalles sammenligningsbasert sortering

4 Klassifisering Innstikk (Insertion) Vanlig instikk, shellsort Bytte (Exchange) Boble, Cocktail/Shaker, (Quicksort) Utvalg (Selection) Vanlig utvalg, treutvalg, heapsort Fletting (Merge), indeksering og partisjonering

5 Klassifisering Sammenligningsbasert Kompleksitet Minnebruk Stabilitet

6 Boble-sortering Bobler store elementer mot høyre

7

8 Innstikk-sortering Algoritme: Går gjennom dataene N-1 ganger (passes) Etter hver gjennomgang p er alle elementer fra 0 tom. p sortert I gjennomgang p flytter vi element p til venstre, helt til det kommer til sin rette posisjon ta element p over i tmp flytt alle større elementer til venstre for p ett trinn mot høyre sett inn element tmp på den ledige plassen

9 Innstikk-sortering

10 Algoritmen er θ(N 2 ) Hvis input er ferdig sortert er tiden O(N)

11 Nedre grense for enkle sorteringsalgoritmer En inversjon i en array av tall er et par av tall der i a[j] Antall inversjoner er lik antall ombyttinger i insert sort Det kan vises at i gjennomsnitt er antall inversjoner N(N-1)/4 Algoritmer som arbeider ved å bytte om på naboelementer blir dermed O(N 2 ) Skal en algoritme være raskere enn kvadratisk, må den bytte elementer som ligger lenger unna hverandre

12 Shellsort Første algoritme som er bedre enn kvadratisk Sammenligner elementer som ligger lenger unna hverandre Starter med store avstander - i siste runde er avstanden 1 Sortering med fallende avstand Avstandssekvensen: h 1, h 2,...., h t Kan variere, men h 1 må være 1 (h 1 brukes i siste runde) Har stor betydning for kjøretiden Donald Shell foreslo h t =antall/2 og h k-1 =h k /2 - et dårlig valg Hver runde sorterer elementmengdene med avstand h k ved innsetting. Sier da at arrayen er h k -sortert.

13 Shellsort

14 Worst case med Shells inkrementer Θ(N 2 ) Kan forbedres med Hibbards inkrementer 1,3,7,..,2 k -1 Θ(N 3/2 ) Kan ytterligere forbedres med Sedgewicks inkrementer O(N 4/3 ) Er rask fordi Sorteringen i alle pass unntatt det siste gjør billig sortering av ikke-naboer Siste pass - instikk-sortering kjører på en nesten ferdig sortert array - og det er raskt Shellsort er enkel og gir brukbar ytelse i praksis ved N~10000

15 Heap-sortering Sortering ved hjelp av prioritetskø O(NlogN), men tregere i praksis enn Shellsort med Sedgewicks inkrementer Kjøretider Bygge treet O(N) i snitt O(NlogN) worst case Hente alle elementene med deleteMin O(NlogN)


Laste ned ppt "INF 295 Forelesning 20 - Kapittel 7 Boble-, innstikk-, Shell-, Heap-, Quick-, Mergesortering Hans Fr. Nordhaug (Ola Bø)"

Liknende presentasjoner


Annonser fra Google