INF 295 Algoritmer og datastrukturer Forelesning 21 Merge, Quick og Bøtte, Radix og ekstern sortering Hans Fr. Nordhaug (Ola Bø)

Slides:



Advertisements
Liknende presentasjoner
4 Bruk øynene riktig.
Advertisements

TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Kristian Veøy
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Kap.8 Sortering og søking sist oppdatert • Del 1 Søking - lineær søking m/u sorterte elementer - binærsøking - analyse • Del 2 Sortering - ”gamle”
Algoritmer for søk og sortering Førsteamanuensis Alf Inge Wang
Ulike sorteringsmetoder Kompleksitet av dem
Smart bruk av Vortex til møter, samhandling/samarbeid mm
Forside Korteste sti BFS Modifikasjon Dijkstra Eksempel Korrekthet Analyse Øving Spørsmål Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no.
@ TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Åsmund Eldhuset asmunde idi.ntnu.no.
Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no
1 Øvingsforelesning Andreas Knudsen Nils Grimsmo
Øvingsforelesning 3 Grafer, BFS, DFS og hashing
Kompleksitetsanalyse
Øvingsforelesning 2 Trær og søking i dem, samt litt diverse emner Kristian Veøy
Alg. Dat Øvingsforelesning 3 Grafer, BFS, DFS og hashing Børge Rødsjø
Øvingsforelesning Magnus Haug
Forside Motivasjon Analyse Forside Motivasjon Analyse  -notasjon O og  Relasjoner Klasser Fallgruver Spørsmål Kompleksitetsanalyse Åsmund Eldhuset asmunde.
Regneark II IN 102 Forelesning 4.
INF 295 Forelesning 15 - kap 9 Grafer Hans Fr. Nordhaug (Ola Bø)
Algoritmiske metoder Innhold: Effektivitetsbetraktninger Programmeringsteknikker Datastrukturer Algoritmer tilknyttet datastrukturene Lærebok: Hafting/Ljosland:
Klargjøring fra forrige gang
Sortering og søk. Sortering av data som ligger på en fil Prisipielt to hovedmåter gjøre dette på: 1.Arbeide mot filen 1.Lese en linje, og lese de resterende.
Kapittel 11 Rekursjon Å tenke rekursivt Rekursjon er ein programmeringsteknikk der ein metode kallar seg sjølv for å fullføre ei oppgåve For å kunne.
Looking up data In P2P systems. Innhold Søkeproblemet Distribuerte Hash Tabeller Noen eksempel systemer: CAN Pastry Tapestry Chord (som vil bli sett nærmere.
1 Kap 08 Kø. 2 Kø - Definisjon En kø (eng queue) er en lineær struktur hvor elementer kan innsetttes kun i den ene enden av listen, kalt bak, og fjernes.
Kap 02 Tabeller / Tabelloperasjoner. Enkeltvariable Les inn nedbørmengde for årets 12 måneder: Les n1 Les n2 … Les n12 n1 n2 n12.
Dynamisk programmering
Mandag 8. November Powerpoint..
INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 1 - kapittel 1 Introduksjon Hans F. Nordhaug (Ola Bø) (Ketil Danielsen, 2007)
INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 8 Trær Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 13 - kap 6 Prioritetskø (Heap) Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 16 - kap 9 Minimalt spenntre og korteste vei i grafer Hans Fredrik Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 11 Når RAM ikke strekker til - B-trær og Utvidbar hashing Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 17 - kap 9 Korteste vei i grafer Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 20 - Kapittel 7 Boble-, innstikk-, Shell-, Heap-, Quick-, Mergesortering Hans Fr. Nordhaug (Ola Bø)
Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 4 Algoritmeanalyse Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 2 - kapittel 1 Hans F. Nordhaug (Ola Bø)
INF 295 forelesning 13 - kap 6 Andre prioritetskøer Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 18 - kap 9 Aktivitetsgrafer
INF 295 Algoritmer og datastrukturer Forelesning 6 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 24 Repetisjon
INF 295 Algoritmer og datastrukturer Forelesning 9b Balanserte (binære) trær Hans Fr. Nordhaug.
INF 295 Forelesning 19 - Dynamisk programmering Korteste vei alle til alle (Floyd) Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 10 Invarianter og Hashing Hans Fr. Nordhaug (Ola Bø)
Hovedfagspresentasjon
INF 4130 Eksamen 2008 Gjennomgang.
Magnus Haug Algoritmer og Datastrukturer
Kapping av plater Mål: Vi skal lage komponenter for en møbelfabrikk ut fra standardiserte plater på 12 x 24 dm. Komponentene har lengde og bredde oppgitt.
INF 295 forelesning 12 Repetisjon per 17. februar Hans F. Nordhaug (Ola Bø)
Alg. Dat Øvingsforelesning 11 Dynamisk programmering, grådighet
Designing a DHT for low latency and high through TDT2 – Avanserte distribuerte systemer Øystein Ellingbø.
INF 295 Algoritmer og datastrukturer Forelesning 5 Algoritmeanalyse Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 22 Teknikker for algoritmeutvikling Hans Fr. Nordhaug/ Ola Bø.
Ortering Mål: Se på forskjellige måter for sortering.
Sorterings- Algoritmer Algoritmer og Datastrukturer.
Prioritetskøer Binære heaper Venstrevridde heaper (Leftist) Skeive heaper (Skew) Binomialheaper Fibonacciheaper Prioritetskøer er viktige i bla. operativsystemer.
INF 295 Algoritmer og datastrukturer Web-spider Oblig 3 Hans Fr. Nordhaug (Ola Bø)
Inf1000 (Uke 5) Arrayer, filer og tekst
LOG530 Distribusjonsplanlegging
Matematikk 1 årskurs 26. oktober 2009
INF 295 Algoritmer og datastrukturer Forelesning 23 Kompleksitet Hans Fr. Nordhaug/ Ola Bø.
HUSK EKSAMENSTILMELDING Frist: 15. februar. Algoritmer og Datastrukturer 1 Merge-Sort [CLRS, kapitel 2.3] Heaps [CLRS, kapitel 6] Gerth Stølting Brodal.
1 Øvingsforelesning 4 Topologisk sortering Minimale spenntrær Håkon Jacobsen
INF5110 – 5. og 7. mai 2015 Stein Krogdahl, Ifi, UiO
Eric Jul PSE, Inst. for informatikk
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

INF 295 Algoritmer og datastrukturer Forelesning 21 Merge, Quick og Bøtte, Radix og ekstern sortering Hans Fr. Nordhaug (Ola Bø)

Mergesort Bygger på sammensmelting av sorterte lister Hver av de sorterte listene kan lages ved å sammensmelte sorterte lister som kan bygges ved å sammensmelte sorterte lister.... Mergesort kjører i O(NlogN) worst case Antall sammenlikninger er nesten optimal Rekursiv algoritme Kjøretid Merge av to lister er lineær Analysen bygger på at T(N)=2*T(N/2)+N Plassbehov – Trenger en ekstra temporær array

Mergesort rekursiv rutine

Mergesort merge-rutine

Mergesort driver

Quicksort Raskeste kjente sorteringsalgoritme i praksis Gjennomsnittlig kjøretid O(NlogN) O(N 2 ) worst case – men kan gjøres svært usannsynlig Har rykte for å være vanskelig å implementere Algoritmen er en rekursiv splitt og hersk algoritme

Algoritme 1. Hvis antall elementer er 0 eller 1 returner 2. Plukk et vilkårlig element v i S. Elementet kalles pivot 3. Partisjoner de resterende elementene i S i to disjunkte mengder - S1: elementene som er mindre enn eller lik v S2: elementene som er større enn eller lik v 4. Returner quicksort( S1), fulgt av Pivot, fulgt av quicksort(S2)

Quicksort-algoritme Hvordan plukke ut pivot-elementet? Ideelt det midterste elementet for å få en effektiv algoritme Splitt og hersk som mergesort Ingen garanti for like store delproblemer Likevel raskere enn mergesort i praksis Hvorfor? Alt foregår effektivt og i arrayen som skal sorteres Krever i motsetning til merge ingen ekstra array

Å velge Pivot-element til Quicksort Algoritmen fungerer uansett hvordan pivot velges Men den fungerer dårlig hvis vi stadig bruker en pivot som er langt fra midten Hva om vi bruker første element som pivot? Svært dårlig på materiale som er (nesten) sortert Gir kvadratisk tid på å gjøre (nesten) ingen ting. Nesten sortert er ganske vanlig. Hvorfor? Bokas konklusjon: An absolutely horrible idea Bruke den største av de to første? Nei Ta et tilfeldig element Tilfeldig tallgenerering er for dyrt Det beste valget er medianen av tabellen Median er for dyrt Velger medianen av første, siste og midtre element!

Partisjoneringsstrategi Partisjonering: Flytte alle elementer som er større enn Pivoten til høyre for Pivot Flytte alle elementer som er mindre enn Pivoten til venstre for Pivot Mange mulige strategier. Krever omtanke. Løsning: Flytt Pivot til slutten. Sett peker til hver ende Flytt pekerne til du finner elementer som skal flyttes Bytt elementene, flytt pekerne videre til du finner nye elementer som skal flyttes osv Når de to pekerne har passert hverandre er du ferdig Bytt Pivot med siste posisjon for venstrepeker Hva gjør vi med elementer som er lik Pivot?

Små Arrayer Quicksort er mindre effektiv enn innsettings- sortering for N<20 Etterson Quicksort er rekursiv, vil det bli mange slike korte arrayer å sortere Strategi: Kutt Quicksort og gå over til Insettingssortering når delarrayen er liten nok Cutoff mellom 5 og 20 går bra.

Et eksempel på Quick-sort Pivotgenerering gjøres på stedet Positive sideeffekter: Plasserer første, siste og pivot i riktig partisjon Pivot flyttes til siste-1 Pekerne kan dermed starte i første+1 og siste-2 første og siste blir dermed sentinel (skiltvakter) som sikrer at pekerne vil stoppe innenfor arrayen Mulig optimalisering av bytting Indre loop er svært effektiv: increment, sammenlikn, jump

Quick-sort Finne Pivot

Quick-sort

Bøttesortering Fungerer når vi har mer opplysninger om materialet som skal sorteres Eksempel: Sortering av naturlige tall med gitt øvre grense Idé Opprett en array int[] antall=new int[øvre grense] For hvert element inkrementerer vi tilsvarende antall For hver i mellom 0 og øvre grense, skriv ut i så mange ganger som antall[i] tilsier

Bøttesortering

Kan også sortere mer kompliserte elementer enn heltall, bare vi sorterer på noe som svarer til heltall Hvis tallområdet blir for stort er Radix-sort et alternativ Kan være betydelig raskere enn Quick-sort Ikke sammenlikningsbasert Kan ikke brukes som generell algoritme Kan ha mange anvendelser i praksis Ikke uvanlig å ha små heltall som input

Radix-sortering Når det blir for mange bøtter - f.eks delnummere Sortere i bøtter på "siffer" for "siffer" Minst signifikante siffer først "Siffer" kan være desimalt siffer - gir 10 bøtter Ikke nødvendigvis effektivt - det blir mye flytting Mer effektivt å bruke mange bits i hvert "siffer" Radix er grunntallet i et tallsystem

Radix-sortering

Resultater Sorteringsalgoritmer 450 MHz Pentium Sortering av tilfeldige tall mellom 0 og Tidsforbruk bubblesort:9010 ms Tidsforbruk insertionsort:3950 ms Tidtaking har usikkerhet > 60 ms - klokka tikker bare 18,2 ganger per sekund!! Tidsforbruk heapsort:60 ms Tidsforbruk shellsort:50 ms Tidsforbruk mergeSort:60 ms Tidsforbruk quicksort:50 ms Tidsforbruk bucketsort:0 ms

Resultater Sortering av tilfeldige tall mellom 0 og Avanserte sammenlikningsbaserte algoritmer Tidsforbruk heapsort:11040 ms Tidsforbruk shellsort:20210 ms Tidsforbruk HibbardShellsort:19010 ms Tidsforbruk SedgewickShellsort:11640 ms Tidsforbruk mergeSort:7360 ms Tidsforbruk quicksort:5110 ms Tidsforbruk javas sort (quicksort):6650 ms Algoritmer med direkte plassering Tidsforbruk bucketsort:2300 ms Bucketsort med bøtter Tidsforbruk radixSort med bibliotekslister:12250 ms Tidsforbruk radixSort med skreddersydde lister:3790 ms Radixsort med bøtter

Ekstern sortering Mange tilfeller med for mye data til sortering i indre lager Nye algoritmer er nødvendig Elementer som ikke er naboer vil ta tid å aksessere Diskaksess tar tid Tape er spesielt krevende på grunn av sekvensiell aksess Skal vi sortere med tape, trengs minst tre tapelesere - ellers er vi i trøbbel

Ekstern sortering Grunnleggende algoritme: MergeSort 4 taper Ta1, Ta2, Tb1, Tb2. Data på Ta1 Algoritme 1. Gjenta: Fyll memory fra Ta1 og sorter internt M tall i gangen. Skriv til Tb1 og Tb2 vekselvis. Hver operasjon kalles en run. Rewind 2. Flett data for en run fra Tb1 og en run fra Tb2, skriv flettede data til Ta1 og Ta2 vekselvis. Hver operasjon kalles en run- og er dobbelt så lang som forrige run. Tilbakespol alle taper og gjenta (med rollene for Ta og Tb byttet om) til det bare er en run. Da er det ferdig sortert. Antall omganger er log(N/M)

Ekstern sortering - eksempel Ta Ta2 Tb1 Tb2 Ta1 Ta2 Tb Tb

Ekstern sortering - eksempel Ta Ta Tb1 Tb2 Ta1 Ta2 Tb Tb215

Ekstern sortering - eksempel Ta Ta2 Tb1 Tb2 I dette eksemplet kunne altså maskinen lese inn tre tall i intern minne - resten måtte skje på tape. Krever ca log(13/3) omganger.

Multiway merge Har vi flere tapestasjoner, kan vi merge fra flere taper på en gang. Tar hele tiden minste element fra en av de k tapene og leser neste post på tapen. Binær heap gir rask henting av minste element

Polyphase merge Gjøre k-veis fletting med k+1 taper istedenfor 2k. Strategien er enkel – fordel runs ujevnt, og rewind når det kortest er ferdig. Problemet er antall omganger. Valg fordeling etter (k) Fibonacci.

Konstruksjon av runs Rett frem – les M elementer og sorter disse intern, gjenta. Men hver gang et tall skrives tilbake til tape blir det en ledig plass internt – bruk denne vha av Replacement selection (RS). Nytt tall velges fra minne med deleteMin (binær heap). Fyll inn et nytt tall fra tape i internt minne hver gang – enten i køen eller i ”dead space”. Bygg ny heap når køen er tom.

Oppsummering Bruk vanlig innstikk på små array, ellers shellsort eller quicksort. I spesielle tilfeller kan bøtte eller radix søk brukes. Sorteringsalgoritmer kan kategoriseres. Ekstern sortering er vanligvis basert på fletting.