Søgning og Sortering. Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering Flettesortering. Philip Bille

Relaterede dokumenter
Søgning og Sortering. Søgning og Sortering. Søgning. Linæer søgning

Søgning og Sortering. Philip Bille

Introduktion. Introduktion. Algoritmer og datastrukturer. Eksempel: Maksimalt tal

Introduktion. Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3. Philip Bille

Dynamisk programmering

Divide-and-Conquer algoritmer

Dynamisk programmering

Divide-and-Conquer algoritmer

Divide-and-Conquer algoritmer

Algoritmer og invarianter

Divide-and-Conquer algoritmer

Sortering. Eksempel: De n tal i sorteret orden

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Sortering ved fletning (merge-sort) Del-og-hersk. Merge-sort

Danmarks Tekniske Universitet

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

Algoritmeanalyse. Øvre grænse for algoritme. Øvre grænse for problem. Nedre grænse for problem. Identificer essentiel(le) operation(er)

Danmarks Tekniske Universitet

Prioritetskøer og hobe. Philip Bille

Intervalsøgning. Algoritmisk geometri. Motivation for intervaltræer. Intervalsøgning. Lad der være givet en database over ansatte i en virksomhed

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Skriftlig eksamen i Datalogi

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Analyse af algoritmer

Grundlæggende køretidsanalyse af algoritmer

Danmarks Tekniske Universitet

1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer.

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Introduktion Til Konkurrenceprogrammering

DM507 Algoritmer og datastrukturer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

DM507 Algoritmer og datastrukturer

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

Analyse af algoritmer. Analyse af algoritmer. Analyse af algoritmer. Køretid

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Transkript:

Søgning og Sortering Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering Flettesortering Philip Bille

Søgning og Sortering Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering Flettesortering

Søgning Søgning. Givet en sorteret tabel A og et tal x, afgør om der findes indgang i, så A[i] = x. Sorteret tabel. En tabel A[0..n-1] er sorteret hvis A[0] A[1] A[n-1] (ikkefaldende rækkefølge). 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 4 7 12 16 18 25 28 31 33 36 42 45 47 50

Linæer søgning Lineær søgning. Undersøg for alle indgange i om A[i] = x. Tid. Θ(n) Udfordring. Kan vi udnytte at tabellen er sorteret til at gøre det bedre? 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 4 7 12 16 18 25 28 31 33 36 42 45 47 50

Binær søgning Binær søgning (binary search). Kig på midterste indgang m i A. hvis A[m] = x returner sand og stop. hvis A[m] < x fortsæt rekursivt på højre halvdel. hvis A[m] > x fortsæt rekursivt på venstre halvdel. Stop hvis tabellen har størrelse 0 og returner falsk. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 4 7 12 16 18 25 28 31 33 36 42 45 47 50

Binær søgning BINÆRSØGNING(A,i,j,x) if j < i return false m = i+j/2 if A[m] = x return true elseif A[m] < x return BINÆRSØGNING(A,m+1,j,x) else return BINÆRSØGNING(A,i,m-1,x) // A[m] > x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 4 7 12 16 18 25 28 31 33 36 42 45 47 50 Tid. Hvor hurtigt kører den? Analyse 1. Analog til analyse af rekursiv toppunktsalgoritme. Et rekursivt kald tager konstant tid. Hvert rekursivt kald halverer tabellen vi kigger på. Vi stopper når tabellen har størrelse 0. Køretiden er Θ(log n)

Binær søgning Analyse 2. Lad T(n) være køretiden for binær søgning. Opskriv og udregn rekursionsligningen for T(n). T (n) = ( T (n/2) + c hvis n>1 d hvis n =1 T (n) =T = T = T n 2 n 4 n 8 + c + c + c + c + c + c. n = T 2 k + ck. n = T 2 log 2 n + c log 2 n = T (1) + c log 2 n = d + c log 2 n = (log n)

Søgning Vi kan søge i en sorteret tabel i Θ(n) tid med lineær søgning. Θ(log n) tid med binær søgning.

Søgning og Sortering Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering Flettesortering

Sortering Sortering. Givet en tabel A[0..n-1] returner en tabel B[0..n-1] med samme værdier som A men i sorteret orden. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 33 4 25 28 45 18 7 12 36 1 47 42 50 16 31 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 4 7 12 16 18 25 28 31 33 36 42 45 47 50

Anvendelser Oplagte. Sortere en liste af navne, organisere et MP3 bibliotek, vise Google PageRank resultater, vise Facebook feed i kronologisk rækkefølge. Ikke oplagte. Datakompression, computergrafik, bioinformatik, anbefalingssystemer (film på Netflix, bøger på Amazon, reklamer på Google,..). Nemme problemer for sorteret data. Binær søgning, find median, identificer duplikater, find tætteste par, find statistiske perifere observationer (outliers).

Indsættelsessortering (insertion-sort) Indsættelsessortering. Start med en usorteret tabel A. Kig på indgangene fra venstre til højre i n runder. Ved runde i: Deltabel A[0..i-1] er sorteret. Indsæt A[i] i A[0..i-1] så A[0..i] er sorteret. For at finde rette sted til A[i] sammenligner vi med indgangene fra højre til venstre. 4 18 25 28 33 45 7 12 36 1 47 42 50 16 31

Indsættelsessortering INDSÆTTELSESSORTERING(A, n) for i = 1 to n-1 j = i while j > 0 and A[j-1] > A[j] ombyt A[j] og A[j-1] j = j - 1 4 18 25 28 33 45 7 12 36 1 47 42 50 16 31 Tid. Hvad er køretiden T(n)? Hvad er tiden for at indsætte A[i] i sorteret rækkefølge blandt A[0..i-1]? c i tid for en konstant c. samlet tid: T (n) = nx ci = c i=1 Udfordring. Kan vi sortere hurtigere? nx i = i=1 (n + 1) 2 = (n 2 )

Flettesortering (mergesort) Flettesortering. Hurtig sorteringsalgoritme. Ide. Rekursiv sortering vha. fletning af sorterede deltabeller.

Fletning (merge) Mål. Kombiner to sorterede tabeller til én sorteret tabel. Ide. Gennemløb begge sorterede tabeller i stigende rækkefølge: I hvert skridt indsæt det mindste af de to nuværende elementer fra tabellerne i en ny tabel. Ryk frem i tabellen med det mindste element. Gentag indtil alle elementer er indsat i ny tabel. 1 12 16 31 36 42 47 50 4 7 18 25 28 33 45 51 1 4 7 12 16

Fletning Tid. Hvor hurtigt kører fletning på to tabeller A1 og A2? Hvert skridt i algoritmen tager Θ(1) tid. I hvert skridt flytter vi en indgang frem i en af tabellerne. Θ( A1 + A2 ) tid. 1 12 16 31 36 42 47 50 4 7 18 25 28 33 45 51 1 4 7 12 16

Flettesortering (mergesort) Flettesortering. Hvis A 1, returner A. Ellers: Del A i to halvdele. Sorter hver halvdel rekursivt. Flet de to halvdele sammen. 16 31 1 36 47 50 42 12 7 4 51 28 45 25 18 33 1 4 7 12 16 18 25 28 31 33 36 42 45 47 50 51 16 31 1 36 47 50 42 12 1 12 16 31 36 42 47 50 7 4 51 28 45 25 18 33 4 7 18 25 28 33 45 51

16 31 1 36 47 50 42 12 7 4 51 28 45 25 18 33 1 4 7 12 16 18 25 28 31 33 36 42 45 47 50 51 16 31 1 36 47 50 42 12 1 12 16 31 36 42 47 50 7 4 51 28 45 25 18 33 4 7 18 25 28 33 45 51 16 31 1 36 47 50 42 12 7 4 51 28 45 25 18 33 1 16 31 36 12 42 47 50 4 7 28 51 18 25 33 45 16 31 1 36 47 50 42 12 7 4 51 28 45 25 18 33 16 31 1 36 47 50 12 42 4 7 28 51 25 45 18 33 16 31 1 36 47 50 42 12 7 4 51 28 45 25 18 33

Flettesortering (mergesort) 16 31 1 36 47 50 42 12 7 4 51 28 45 25 18 33 FLETTESORTERING(A,i,j) if i < j m = i+j/2 1 4 7 12 16 18 25 28 31 33 36 42 45 47 50 51 16 31 1 36 47 50 42 12 7 4 51 28 45 25 18 33 1 12 16 31 36 42 47 50 4 7 18 25 28 33 45 51 FLETTESORTERING(A,i,m) FLETTESORTERING(A,m+1,j) FLET(A, i, m, j) 16 31 1 36 1 16 31 36 16 31 1 36 16 31 1 36 47 50 42 12 12 42 47 50 47 50 42 12 47 50 12 42 7 4 51 28 4 7 28 51 7 4 51 28 4 7 28 51 45 25 18 33 18 25 33 45 45 25 18 33 25 45 18 33 16 31 1 36 47 50 42 12 7 4 51 28 45 25 18 33 Tid. Lad T(n) være køretiden af flettesortering. Hvordan kan vi udregne T(n)? Ide. Opstil rekursionstræ og udregn samlet tid for alle rekursive kald.

Flettesortering 2 2 4 4 4 4 log 2 n 8 8 8 8 8 8 8 8 d d d d dn T (n) = log 2 n + dn = (n log 2 n)

Sortering Vi kan sortere en tabel i Θ(n 2 ) tid med indsættelsessortering. Θ(nlog n) tid med flettesortering.

Del og hersk (divide-and-conquer) Flettesortering er eksempel på en del-og-hersk algoritme. Del-og-hersk. algoritmisk designparadigme. Del. Opdel problemet i et eller flere delproblemer Hersk. Løs delproblemerne rekursivt Kombiner. Sæt løsningerne til delproblemerne sammen til en samlet løsning for problemet. Flettesortering. Del. Del A i to halvdele. Hersk. Sorter hver halvdel rekursivt. Kombiner. Flet de to halvdele sammen.

Søgning og Sortering Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering Flettesortering