Øvingsforelesning 3: Splitt og hersk. Daniel Solberg

Like dokumenter
Quicksort. Lars Vidar Magnusson Kapittel 7 Quicksort Randomisert Quicksort Analyse av Quicksort

Divide-and-Conquer II

deeegimnoorrrsstt Sjette forelesning

Øvingsforelesning 6. Sorteringsalgoritmer. Kristian Veøy

Kjøretidsanalyse. Hogne Jørgensen

INF2220: Time 12 - Sortering

Divide-and-Conquer. Lars Vidar Magnusson

n/b log b n = (lg n) a log b n = n log b a

Øvingsforelesning 6. Sorteringsalgoritmer. Martin Kirkholt Melhus Basert på foiler av Kristian Veøy 30/09/14 1

Python: Rekursjon (og programmering av algoritmer) Python-bok: Kapittel 12 + teoribok om Algoritmer

Først litt praktisk info. Sorteringsmetoder. Nordisk mesterskap i programmering (NCPC) Agenda

LO118D Forelesning 2 (DM)

deeegimnoorrrsstt Sjette forelesning

Logaritmiske sorteringsalgoritmer

Heapsort. Lars Vidar Magnusson Kapittel 6 Heaps Heapsort Prioritetskøer

Algdat-ninja på 60 minutter: Et galskapsprosjekt. Magnus Lie Hetland

Ekstra ark kan legges ved om nødvendig, men det er meningen at svarene skal få plass i rutene på oppgavearkene. Lange svar teller ikke positivt.

Spenntrær, oppsummert: Kruskal: Traverserer ikke. Plukker kanter i hytt og vær Prim: Legger alltid til den noden som er nærmest treet

Løsningsforslag for Obligatorisk Oppgave 2. Algoritmer og Datastrukturer ITF20006

Ninety-nine bottles. Femte forelesning. I dagens forelesning: Mest matematiske verktøy. Først: Asymptotisk notasjon. Så: Rekurrensligninger.

All good things. Fjortende forelesning

Sortering i Lineær Tid

Løsningsforslag for eksamen i fag TDT4120 Algoritmer og datastrukturer Tirsdag 9. desember 2003, kl

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Introduksjon til Algoritmeanalyse

Kondisjonstest. Algoritmer og datastrukturer. Repetisjonsoppgaver - LF. Onsdag 6. oktober 2004

Læringsmål og pensum. Algoritmeeffektivitet

Avsluttende eksamen i IT1105/TDT4120 Algoritmer og datastrukturer

TDT4110 Informasjonsteknologi grunnkurs: Tema: Algoritmer i praksis. Professor Alf Inge Wang

Algdat Eksamensforelesning. Nils Barlaug

Quicksort. Fra idé til algoritme.

kap. 8.6 Computational Geometry Hovedkapittelet (kap. 8) dreier seg generelt om devide-and-conquer eller splitt og hersk :

Datastrukturer for rask søking

ALGORITMER OG DATASTRUKTURER

ALGORITMER OG DATASTRUKTURER

TDT4105 Informasjonsteknologi, grunnkurs

Om Kurset og Analyse av Algoritmer

for bare trær Andre forelesning

Løsningsforslag til eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

To geometriske algoritmer, kap. 8.6

Søkeproblemet. Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke?

Løsningsforslag for eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

Når Merge sort og Insertion sort samarbeider

Algdat Oppsummering, eksamen-ting. Jim Frode Hoff

ALGORITMER OG DATASTRUKTURER

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Grådige algoritmer. Lars Vidar Magnusson Kapittel 16. Aktivitetvelgingsproblemet Huffmankoder

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Rekursiv programmering

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Hvor raskt klarer vi å sortere?

INF2220: Forelesning 2

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

Sorteringsproblemet. Gitt en array A med n elementer som kan sammenlignes med hverandre:

Algoritme-Analyse. Asymptotisk ytelse. Sammenligning av kjøretid. Konstanter mot n. Algoritme-kompeksitet. Hva er størrelsen (n) av et problem?

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

LØSNINGSFORSLAG, EKSAMEN I ALGORITMER OG DATASTRUKTURER (IT1105)

Dijkstras algoritme. Her finnes det også (minst) en riktig rekkefølge for Relax, men den må vi oppdage litt etter hvert.

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

Dictionary er et objekt som lagrer en samling av data. Minner litt om lister men har klare forskjeller:

Løsningsforslag for eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 18. Desember 2000, kl

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Høgskoleni østfold EKSAMEN. 4 dobbeltsidige ark med notater Lars Magnusson

Pensum: 3. utg av Cormen et al. Øvingstime: I morgen, 14:15

Hvorfor sortering og søking? Søking og sortering. Binære søketrær. Ordnet innsetting forbereder for mer effektiv søking og sortering INF1010 INF1010

LO118D Forelesning 12 (DM)

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamen i tdt4120 Algoritmer og datastrukturer

O(V 2 ) bwfs(v, i=1) λ[v] = i for each neighbor u of v if 0 < λ[u] < i. bwfs(u, i+1) if λ[u] = 0

All good things. Fjortende forelesning

Eksamenshefte TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Algoritmer for Delaunay-triangulering

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Kontinuasjonseksamen i fag SIF8010 Algoritmer og Datastrukturer Torsdag 9. August 2001, kl

Rekursiv programmering

Algoritmer - definisjon

for bare trær Andre forelesning

INF1010 notat: Binærsøking og quicksort

INF2220: Time 8 og 9 - Kompleksitet, beregnbarhet og kombinatorisk søk

Kap.8 Sortering og søking sist oppdatert 16.03

PG4200 Algoritmer og datastrukturer Forelesning 2

Effektiv eksekvering av spørsmål

Løsningsforslag for utvalgte oppgaver fra kapittel 3

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Algdat - øvingsforelesning

PG4200 Algoritmer og datastrukturer Forelesning 3 Rekursjon Estimering

Filbehandling Tekstfiler

Rekursjon I. TRE AV REKURSIVE KALL, II. INDUKTIVE DATA TYPER IV. STABEL AV REKURSIVE KALL V. KORREKTHET. rekursjonsdybde terminering ordning

Algoritmer - definisjon

Forelesning 4 torsdag den 28. august

M. L. Hetland. Foto (utsnitt av original): Pedro Ribeiro Simões / CC BY 2.0. Algoritmer. og datastrukturer

UNIVERSITETET I OSLO

Magnus Lie Hetland. Pensumhefte, Algoritmer og datastrukturer

Pensum: fra boken (H-03)+ forelesninger

Eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

Øvingsforelesning 4. Martin Aasen

Transkript:

Øvingsforelesning 3: Splitt og hersk Daniel Solberg

Plan for dagen Vi går raskt gjennom øving 2 Splitt og hersk Algoritmer: Mergesort Quicksort Binærsøk Rekurrenser, masse rekurrenser 2

Splitt og hersk (Divide-and-Conquer) Et designparadigme for algoritmer Hovedidé: Løs et problem vha. å løse mindre versjoner av det samme problemet Går hånd i hånd med matematisk induksjon 3

Splitt og hersk (Divide-and-Conquer) Tre steg: Divide Conquer Combine 4

Splitt og hersk (Divide-and-Conquer) Tre steg: Divide Conquer Combine 5

Splitt og hersk (Divide-and-Conquer) Tre steg: Divide Conquer Combine 6

Splitt og hersk (Divide-and-Conquer) Tre steg: Divide Conquer Combine 7

Splitt og hersk (Divide-and-Conquer) Tre steg: Divide Conquer Combine 8

Splitt og hersk (Divide-and-Conquer) Tre steg: Divide Conquer Combine 9

Splitt og hersk (Divide-and-Conquer) Tre steg: Divide Conquer Combine Combine 10

Splitt og hersk (Divide-and-Conquer) Tre steg: Divide Conquer Combine Combine 11

Splitt og hersk (Divide-and-Conquer) Tre steg: Divide Conquer Combine Combine 12

Splitt og hersk (Divide-and-Conquer) Tre steg: Divide Conquer Combine Basetilfeller 13

Splitt og hersk (Divide-and-Conquer) Tre steg: Divide Rekursive tilfeller Conquer Combine Basetilfeller 14

Splitt og hersk (Divide-and-Conquer) Tre steg: Divide: Dele opp i subproblemer Conquer: Løse subproblemene Combine: Kombinere løsningene til en en større løsning 15

Algoritme: Binærsøk Står ikke i boka, men i pensumheftet! Et veldig enkelt eksempel på splitt og hersk! Finner løsningen ved å løse ett mindre subproblem Ingen combine-steg Kort fortalt: Lar oss søke i en sortert tabell etter et gitt element på O(log n) tid 16

Algoritme: Binærsøk BISECT(A, p, r, v) A = [1, 2, 3, 4, 5, 6, 7, 8] 17

Algoritme: Binærsøk BISECT(A, 1, 8, 7) A = [1, 2, 3, 4, 5, 6, 7, 8] 18

Algoritme: Binærsøk BISECT(A, 1, 8, 7) A = [1, 2, 3, 4, 5, 6, 7, 8] 19

Algoritme: Binærsøk BISECT(A, 5, 8, 7) A = [1, 2, 3, 4, 5, 6, 7, 8] 20

Algoritme: Binærsøk BISECT(A, 5, 8, 7) A = [1, 2, 3, 4, 5, 6, 7, 8] 21

Algoritme: Binærsøk BISECT(A, 7, 8, 7) A = [1, 2, 3, 4, 5, 6, 7, 8] 22

Algoritme: Binærsøk BISECT(A, 7, 8, 7) A = [1, 2, 3, 4, 5, 6, 7, 8] 23

Algoritme: Binærsøk BISECT(A, 7, 8, 7) A = [1, 2, 3, 4, 5, 6, 7, 8] Returner i = 7 24

Algoritme: Mergesort En ganske god sorteringsalgoritme Kjøretid Θ(n log n) Mye bedre enn insertionsort, bubblesort og andre O(n 2 )-algoritmer for store input 25

Algoritme: Mergesort Mergesort: 1. Del tabellen i to 2. Sorter hver halvdel rekursivt med Mergesort 3. Flett sammen halvdelene til én sortert liste 26

Algoritme: Mergesort Mergesort: 1. Del tabellen i to 2. Sorter hver halvdel rekursivt med Mergesort 3. Flett sammen halvdelene til én sortert liste Divide Conquer Combine 27

28 Algoritme: Mergesort

Algoritme: Mergesort Idé: Å flette sammen to sorterte lister er ganske enkelt, Θ(n) tid 29

Algoritme: Mergesort Tavle-eksempel Sorter med Mergesort listen A = [8, 3, 6, 2, 5, 7, 4, 1] 30

Algoritme: Mergesort Mergesort([8, 3, 6, 2, 5, 7, 4, 1]) 31

Algoritme: Mergesort Mergesort([8, 3, 6, 2, 5, 7, 4, 1]) Mergesort([8, 3, 6, 2]) 32

Algoritme: Mergesort Mergesort([8, 3, 6, 2, 5, 7, 4, 1]) Mergesort([8, 3, 6, 2]) Mergesort([8, 3]) 33

Algoritme: Mergesort Mergesort([8, 3, 6, 2, 5, 7, 4, 1]) Mergesort([8, 3, 6, 2]) Mergesort([8, 3]) Mergesort([8]) 34

Algoritme: Mergesort Mergesort([8, 3, 6, 2, 5, 7, 4, 1]) Mergesort([8, 3, 6, 2]) Mergesort([8, 3]) Mergesort([3]) 35

Algoritme: Mergesort Mergesort([8, 3, 6, 2, 5, 7, 4, 1]) Mergesort([8, 3, 6, 2]) Mergesort([8, 3]) - Merge([8], [3]) 36

Algoritme: Mergesort Mergesort([8, 3, 6, 2, 5, 7, 4, 1]) Mergesort([8, 3, 6, 2]) Mergesort([3, 8]) 37

Algoritme: Mergesort Mergesort([8, 3, 6, 2, 5, 7, 4, 1]) Mergesort([3, 8, 6, 2]) 38

Algoritme: Mergesort Mergesort([8, 3, 6, 2, 5, 7, 4, 1]) Mergesort([3, 8, 6, 2]) Mergesort([6, 2]) 39

Algoritme: Mergesort Mergesort([8, 3, 6, 2, 5, 7, 4, 1]) Mergesort([3, 8, 6, 2]) Mergesort([6, 2]) Mergesort([6]) 40

Algoritme: Mergesort Mergesort([8, 3, 6, 2, 5, 7, 4, 1]) Mergesort([3, 8, 6, 2]) Mergesort([6, 2]) Mergesort([2]) 41

Algoritme: Mergesort Mergesort([8, 3, 6, 2, 5, 7, 4, 1]) Mergesort([3, 8, 6, 2]) Mergesort([6, 2]) -Merge([6], [2]) 42

Algoritme: Mergesort Mergesort([8, 3, 6, 2, 5, 7, 4, 1]) Mergesort([3, 8, 6, 2]) Mergesort([2, 6]) 43

Algoritme: Mergesort Mergesort([8, 3, 6, 2, 5, 7, 4, 1]) Mergesort([3, 8, 2, 6]) 44

Algoritme: Mergesort Mergesort([8, 3, 6, 2, 5, 7, 4, 1]) Mergesort([3, 8, 2, 6]) -Merge([3, 8], [2, 6]) 45

Algoritme: Mergesort Mergesort([8, 3, 6, 2, 5, 7, 4, 1]) Mergesort([2, 3, 6, 8]) 46

Algoritme: Mergesort Mergesort([2, 3, 6, 8, 5, 7, 4, 1]) 47

Algoritme: Mergesort Mergesort([2, 3, 6, 8, 5, 7, 4, 1])... 48

Algoritme: Mergesort Mergesort([2, 3, 6, 8, 1, 4, 5, 7]) 49

Algoritme: Mergesort Mergesort([2, 3, 6, 8, 1, 4, 5, 7]) -Merge([2, 3, 6, 8], [1, 4, 5, 7]) 50

Algoritme: Mergesort Mergesort([1, 2, 3, 4, 5, 6, 7, 8]) 51

Algoritme: Mergesort [1, 2, 3, 4, 5, 6, 7, 8] 52

Algoritme: Quicksort Også en ganske god sorteringsalgoritme :) Brukes i praksis, kan være raskere enn mergesort i virkeligheten Average case kjøretid Θ(n log n), men worst case O(n 2 ) 53

Algoritme: Quicksort Quicksort: 1. Velg en pivot (splittelement). Velger alltid bakerste element. 2. Partisjoner tabellen: <=-side og >-side 3. Sorter hver del med Quicksort 54

55 Algoritme: Quicksort

Algoritme: Quicksort Idé: Å partisjonere en liste er ganske enkelt, Θ (n) tid 56

Algoritme: Quicksort Sortere med Quicksort: A = [8, 3, 6, 2, 1, 7, 4, 5] 57

Algoritme: Quicksort Sortere med Quicksort: 1) Velg splittelement A = [8, 3, 6, 2, 1, 7, 4, 5] 58

Algoritme: Quicksort Sortere med Quicksort: 1) Velg splittelement 2) Del i mindre enn og større enn A = [8, 3, 6, 2, 1, 7, 4, 5] 59

Algoritme: Quicksort Sortere med Quicksort: 1) Velg splittelement 2) Del i mindre enn og større enn A = [8, 3, 6, 2, 1, 7, 4, 5] 60

Algoritme: Quicksort Sortere med Quicksort: 1) Velg splittelement 2) Del i mindre enn og større enn A = [8, 3, 6, 2, 1, 7, 4, 5] 61

Algoritme: Quicksort Sortere med Quicksort: 1) Velg splittelement 2) Del i mindre enn og større enn A = [3, 2, 1, 4, 5, 8, 6, 7] 62

Algoritme: Quicksort Sortere med Quicksort: 1) Velg splittelement 2) Del i mindre enn og større enn A = [3, 2, 1, 4, 5, 8, 6, 7] 63

Algoritme: Quicksort Sortere med Quicksort: 1) Velg splittelement 2) Del i mindre enn og større enn 3) Sorter de to delene med Quicksort A = [3, 2, 1, 4, 5, 8, 6, 7] Quicksort Quicksort 64

Algoritme: Quicksort Sortere med Quicksort: 1) Velg splittelement 2) Del i mindre enn og større enn 3) Sorter de to delene med Quicksort A = [1, 2, 3, 4, 5, 6, 7, 8] Quicksort Quicksort 65

Algoritme: Quicksort Ulempe: Noen ganger får vi worst case, O(n 2 ) Og dette skjer for en allerede sortert liste :-/ 66

Algoritme: Quicksort Ulempe: Noen ganger får vi worst case, O(n 2 ) Og dette skjer for en allerede sortert liste :-/ A = [1, 2, 3, 4, 5, 6, 7, 8] 67

Algoritme: Quicksort Ulempe: Noen ganger får vi worst case, O(n 2 ) Og dette skjer for en allerede sortert liste :-/ A = [1, 2, 3, 4, 5, 6, 7, 8] Quicksort 68

Algoritme: Quicksort Ulempe: Noen ganger får vi worst case, O(n 2 ) Og dette skjer for en allerede sortert liste :-/ Derfor: Randomized-Quicksort Velger tilfeldig splittelement, i stedet for alltid bakerst 69

Algoritme: Quicksort Ulempe: Noen ganger får vi worst case, O(n 2 ) Og dette skjer for en allerede sortert liste :-/ Derfor: Randomized-Quicksort Velger tilfeldig splittelement, i stedet for alltid bakerst A = [8, 3, 6, 2, 1, 7, 4, 5] 70

Algoritme: Quicksort Ulempe: Noen ganger får vi worst case, O(n 2 ) Og dette skjer for en allerede sortert liste :-/ Derfor: Randomized-Quicksort Velger tilfeldig splittelement, i stedet for alltid bakerst A = [8, 3, 6, 2, 1, 7, 4, 5] 71

Quicksort vs Randomized-Quicksort Spørsmål: Dersom input består av en tabell med helt tilfeldige tall, hvilken algoritme er best? Er det noen forskjell? 72

Plan for dagen Vi går raskt gjennom øving 2 Splitt og hersk Algoritmer: Mergesort Quicksort Binærsøk Rekurrenser, masse rekurrenser 73

Rekurrenser: Motivasjon Hittil har algoritmene sett noe sånn ut: 74

Rekurrenser: Motivasjon Hittil har algoritmene sett noe sånn ut: Ganske enkelt å finne kjøretid Gjentar n ganger Θ(n) kjøretid 75

Rekurrenser: Motivasjon Men hva når de ser sånn ut? 76

Rekurrenser: Motivasjon Men hva når de ser sånn ut? Trenger en måte å uttrykke og regne på kjøretiden 77

Rekurrenser: Motivasjon La T(n) betegne kjøretiden for sum(a) for en tabell med n tall 78

Rekurrenser: Motivasjon La T(n) betegne kjøretiden for sum(a) for en tabell med n tall T(n) = T(n-1) + 1 79

Rekurrenser: Motivasjon La T(n) betegne kjøretiden for sum(a) for en tabell med n tall T(n) = T(n-1) + 1 T(n) = Θ(n) 80

Løse rekurrenser Vi bruker følgende metoder i dette faget Master-teoremet Regning med rekursjonstrær Iterasjonsmetoden Substitusjonsmetoden Og et triks vi må kunne Variabelskifte 81

Løse rekurrenser Vi bruker følgende metoder i dette faget Master-teoremet - Gir en eksakt løsning Regning med rekursjonstrær - Gir en god gjetning Iterasjonsmetoden - Gir en god gjetning Substitusjonsmetoden - Beviser en gjetning Og et triks vi må kunne Variabelskifte - Gjør noen former for vanskelige rekurrenser om til enkle rekurrenser 82

Løse rekurrenser Vi regner på tavlen 83