Søgning og Sortering. Philip Bille



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

Søgning og Sortering. Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering Flettesortering. 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

Sortering. Eksempel: De n tal i sorteret orden

Divide-and-Conquer algoritmer

Divide-and-Conquer algoritmer

Algoritmer og invarianter

Sortering. Eksempel: De n tal i sorteret orden

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

Divide-and-Conquer algoritmer

Dynamisk programmering

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

Prioritetskøer og hobe. Philip Bille

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

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

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

Grundlæggende køretidsanalyse af algoritmer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

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

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

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

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

Sortering i CPH STL. Jakob Sloth, Morten Lemvigh & Mads Kristensen. CPH STL rapport maj 2003; revidered november 2003

Danmarks Tekniske Universitet

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

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

DM507 Algoritmer og datastrukturer

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

Danmarks Tekniske Universitet

Hashing. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Philip Bille

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

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

Analyse af algoritmer

Introduktion Til Konkurrenceprogrammering

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

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

Løs til optimalitet i eksponentiel tid Find tilnærmet løsning i polynomiel tid

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

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

Rekursion C#-version

Mindste udspændende træ. Mindste udspændende træ. Introduktion. Introduktion

Rekursion og dynamisk programmering

Transkript:

Søgning og Sortering Philip Bille

Plan Søgning Linæer søgning Binær søgning Sortering Indsættelsesortering Flettesortering

Søgning

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

Lineær søgning 1 4 7 12 16 18 25 28 31 33 36 42 45 47 50 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Undersøg for alle indgange A[i] om A[i] = x. Tid: Θ(n)

Binær søgning Kig på midterste indgang m i A. A[m] = x: færdig A[m] < x: fortsæt rekursivt på højre halvdel. A[m] > x: fortsæt rekursivt på venstre halvdel. Stopper når tabellen har størrelse 1

Analyse Hvor hurtigt kører den? Analog til analyse af rekursiv toppunktsalgoritme. Et rekursivt kald tager konstant tid. I hver rekursion halverer vi tabellen vi kigger på. Vi stopper når tabellen har størrelse 1. Køretiden er Θ(log n)

Alternativ analyse 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 (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 Lineær søgning løser søgningsproblemet i Θ(n) tid. Binær søgning løser søgningsproblemet i Θ(log n) tid.

Sortering

Sortering 33 4 25 28 45 18 7 12 36 1 47 42 50 16 31 1 4 7 12 16 18 25 28 31 33 36 42 45 47 50 Sorteringsproblemet: Givet en tabel A[1..n] returner en tabel B[1..n] med samme indhold som A men i sorteret orden.

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 statiske perifere observationer (outliers).

Indsættelsessortering (insertion-sort) Start med en ikke sorteret tabel. Kig på indgangene fra venstre til højre. Ved indgang i: Indsæt A[i] i rækkefølge blandt deltabellen A[1..i-1]. For at finde rette sted sammenligner vi med indgangene fra højre til venstre.

Korrekthed Hvorfor virker det? Før iteration i består deltabellen A[1..i-1] af de tal der oprindeligt var i A[1..i-1] i sorteret rækkefølge. Iteration i indsætter A[i] i deltabellen A[1..i-1] Efter iteration i består deltabellen A[1..i] af de tal der oprindeligt var i A[1..i]

Analyse Hvor hurtigt kører den? Hvor lang tid tager det at indsætte A[i] i korrekt position? Samlet tid = Θ(tid for at indsætte alle indgangene i korrekt position)

Analyse Indsættelsessortering kører i Θ(n 2 ) tid.

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

Fletning (merge) Mål. Kombiner to sorterede tabeller til én sorteret tabel i lineær tid Ide: Hold styr på mindste element i hver sorteret tabel. Indsæt mindste af de to elementer i en ekstra tabel. Gentag indtil færdig.

Analyse Hvert skridt i algoritmen tager Θ(1) tid. I hvert skridt flytter vi en indgang frem i en af tabellerne. Linæer tid i sum af længde af tabellerne.

Flettesortering Del A i to halvdele. Sorter hver halvdel rekursivt. Flet de to halvdele sammen. Stop når tabel har størrelse 1

33 4 25 28 45 18 7 12 4 7 12 18 25 28 33 45 33 4 25 28 45 18 7 12 4 25 28 33 7 12 18 45 33 4 25 28 45 18 7 12 4 33 25 28 18 45 7 12 33 4 25 28 45 18 7 12

33 4 25 28 45 18 7 12 33 4 25 28 45 18 7 12 4 25 28 33 7 12 18 45 33 4 25 28 45 18 7 12 4 33 25 28 18 45 7 12 33 4 25 28 45 18 7 12

33 4 25 28 45 18 7 12 33 4 25 28 45 18 7 12 4 25 28 33 7 12 18 45 33 4 25 28 45 18 7 12 4 33 25 28 18 45 7 12 33 4 25 28 45 18 7 12

33 4 25 28 45 18 7 12 4 7 12 18 25 28 33 45 33 4 25 28 45 18 7 12 4 25 28 33 7 12 18 45 33 4 25 28 45 18 7 12 4 33 25 28 18 45 7 12 33 4 25 28 45 18 7 12

33 4 25 28 45 18 7 12 4 7 12 18 25 28 33 45 33 4 25 28 45 18 7 12 4 25 28 33 7 12 18 45 33 4 25 28 45 18 7 12 4 33 25 28 18 45 7 12 33 4 25 28 45 18 7 12

Analyse Lad T(n) være køretiden af flettesortering. Hvor hurtigt kører den? Ide: T(n) = Θ(total tid brugt på fletning) Fletning tager lineær tid. T(n) = Θ(total længde af tabeller over alle rekursive kald)

33 4 25 28 45 18 7 12 4 7 12 18 25 28 33 45 33 4 25 28 45 18 7 12 4 25 28 33 7 12 18 45 33 4 25 28 45 18 7 12 4 33 25 28 18 45 7 12 33 4 25 28 45 18 7 12

Analyse Flettesorting kører i Θ(nlog n) tid.

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.

Sortering Indsættelsessortering i Θ(n 2 ) tid. Flettesortering i Θ(nlog n) tid. Fletning i Θ(n) tid.

Opsummering Søgning Linæer søgning Binær søgning Sortering Indsættelsesortering Flettesortering