Mm1: Introduction to analysis and design of algorithms - October 6, 2009



Relaterede dokumenter
Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO) Mm1: Introduction to analysis and design of algorithms - October 11, 2010

Mm1: Introduction to analysis and design of algorithms - October 7, 2008

Mm7: A little bit more about sorting - and more times for exercises - November 4, 2008

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO) Mm2: Rekursive algoritmer og rekurrens - October 12, 2010

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jimmy Jessen Nielsen (JJE) Mm2: Rekursive algoritmer og rekurrens - October 10, 2008

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jimmy Jessen Nielsen (JJE) Mm3: More about recurrences - October 10, 2008

Algorithms & Architectures I 2. lektion

Mm6: More sorting algorithms: Heap sort and quick sort - October 29, 2008

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jens Myrup Pedersen (JMP) Mm4: Sorting algorithms - October 23, 2009

Algoritmedesign med internetanvendelser ved Keld Helsgaun

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

Analyse af algoritmer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen (bemærk at log n betegner totals logaritmen): n 2 (log n) 2 2.

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

Sortering. Eksempel: De n tal i sorteret orden

Rolf Fagerberg. Forår 2013

Sortering. Eksempel: De n tal i sorteret orden

Sortering af information er en fundamental og central opgave.

Danmarks Tekniske Universitet

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

Sortering af information er en fundamental og central opgave.

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

Danmarks Tekniske Universitet

Grundlæggende Algoritmer og Datastrukturer. Analyseværktøjer [CLRS, 1-3.1]

Mm4: Greedy algorithms, backtracking and more recurrences - October 21, 2008

Algoritmer og Datastrukturer 1. Gerth Stølting Brodal

Introduktion til DM507

Rolf Fagerberg. Forår 2015

DM507 Algoritmer og datastrukturer

Rolf Fagerberg. Forår 2014

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 5n 4. logn. n 4n 5 n/logn. n n/logn 5n

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

BRP Sortering og søgning. Hægtede lister

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Dynamisk programmering

Rolf Fagerberg. Forår 2012

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

Dynamisk programmering

Danmarks Tekniske Universitet

Divide-and-Conquer algoritmer

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet. Mandag den 22. marts 2004, kl

Danmarks Tekniske Universitet

Søgning og Sortering. Philip Bille

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Danmarks Tekniske Universitet

Dynamisk programmering

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Danmarks Tekniske Universitet

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Rolf Fagerberg. Forår 2015

Divide-and-Conquer algoritmer

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

Beat the Clock Sorteringsnetværk

Divide-and-Conquer algoritmer

Danmarks Tekniske Universitet

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Danmarks Tekniske Universitet

Rekursion og dynamisk programmering

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 7 n 1 7 7/n. 7nlogn. 7n 7nlogn n7

Divide-and-Conquer algoritmer

Asymptotisk analyse af algoritmers køretider

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 4 n n 3n n 2 /logn 5 n n (logn) 3n n 2 /logn 4 n n 5 n

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Korteste veje. Introduktion Egenskaber for korteste veje Dijkstras algoritme Korteste veje på DAGs. Philip Bille

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

Korteste veje. Introduktion Egenskaber for korteste veje Dijkstras algoritme Korteste veje på DAGs. Philip Bille

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 5. 5n 2 5 logn. 2 logn

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n+logn logn (logn) 7 (3/2) n

Grafer og graf-gennemløb

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Skriftlig Eksamen Kombinatorik, Sandsynlighed og Randomiserede Algoritmer (DM528)

Sortering ved fletning (merge-sort)

Grafer og graf-gennemløb

Grafer og graf-gennemløb

Danmarks Tekniske Universitet

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO) Mm8: Hash tables og Hashing - November 10, 2010

Danmarks Tekniske Universitet

Mm8: Hash tables, Hashing and binary search trees - November 7, 2008

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

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

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 7 n 1/ log n. (log n) 4

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

Basic statistics for experimental medical researchers

Perspektiverende Datalogikursus

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Grafer og graf-gennemløb

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET EKSAMEN. Grundkurser i Datalogi. Algoritmer og Datastrukturer 1 (2003-ordning)

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 2 2 n 1/n (logn) n. n 2

University of Copenhagen Faculty of Science Written Exam - 3. April Algebra 3

Grafer og graf-gennemløb

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen.

Transkript:

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jens Myrup Pedersen (JMP) Mm1: Introduction to analysis and design of algorithms - October 6, 2009

Algorithms and Architectures I 1. Introduction to analysis and design of algorithms 2. Recursive algorithms and recurrences 3. Self study 4. Sorting Algorithms 5. Self study 6. Hash tables, binary search trees 7. Self study 8. Binary search trees, red-black trees 9. Self study 10. Misc + Q&A

Dagsorden Introduktion og formål med kursus Introduktion til algoritmer Eksempler Fra problem til algoritme Analyse af algoritmers korrekthed Metode Eksempler Insert sorterings algoritme Merge algoritme Metoder til analyse af algoritmer Notationer Kompleksitet Opsummering og konklusion Opgaver

Formål og mål med kursus (taget fra studieordningen) Kursets formål er at understøtte den studerende i at: Forstå og anvende fundamentale algoritmer til organisation af og beregninger på data. Analysere og konstruere hensigtsmæssige repræsentationer af og beregninger på data. Den studerende skal ved den afsluttende prøve kunne: Anvende begreber, teorier og metoder til at analysere og designe algoritmer. Dokumentere forståelse for simple og sammensatte datastrukturer og deres anvendelser. Dokumentere forståelse for algoritmers og datastrukturers effektivitet, og anvende denne forståelse i forbindelse med konstruktion og analyse af algoritmer og datastrukturer. Redegøre for de overvejelser, der er forbundet med at implementere datastrukturer og algoritmer i praksis Benytte korrekt fagterminologi

Dagsorden Introduktion og formål med kursus Introduktion til algoritmer Eksempler Fra problem til algoritme Analyse af algoritmers korrekthed Metode Eksempler Insert sorterings algoritme Merge algoritme Metoder til analyse af algoritmer Notationer Kompleksitet Opsummering og konklusion Opgaver

Hvad er algoritmer Ordet algoritmer stammer fra den persiske matematiker fra det 9. århundrede: Abu Abdullah Muhammed ibn Musa al-khwarizmi Algoritmer findes overalt i dagligdagen, f.eks. for lyspærer De tidligst kendte algoritmer blev lavet af Babylonerne omkring år 1600 BC til faktorisering af tal og uddragelse af kvadratrødder Et spørgsmål: Hvorfor skal vi studere algoritmer når vi nu har super hurtige computere, der kværner tal en zillion gange hurtigere end vi selv gør? Lamp does not work Lamp plugged In? Bulp burned Out? Buy new lamp Plug in lamp Replace bulp

Et spørgsmål om computer kraft? Lommeregner Desktop Mainframe Distribuerede computere Nogle problemer er mere komplekse end andre. Tænk bare på f.eks. Skak og alle de kombinationsmuligheder der findes, valg af næste træk Søgning og organisering af data på Internettet, data baser, billet systemer osv. Rutning af data over store netværk (evt. ad-hoc) Planlægning af kabel nedgravning for fiber udlægning

En analogi til kompleksitet Fire rejsende med forskellige transportmidler L rejser x meter på x tid P rejser x^2 meter på x tid E rejser e^x meters på x tid F rejser x! meters på x tid hver tager en lille tur.

En analogi til kompleksitet #2 Så de starter hver deres rejse Når L har taget 18 skridt, har E næsten nået sin anden gang rundt om jorden og F vil have været nået til Månen og tilbage igen næsten 500.000 gange L linear P polynomial E exponential F - factorial E vil have taget 12 ture rundt om jorden før L har taget 20 skridt

En analogi til kompleksitet #3 Fortsat Eller hvad med F har taget Solen-Jorden tur/retur ca. 5*10^127 gange mens L stadig mangler 10 meter på 100 m banen? L linear P polynomial E exponential F - factorial Konklusion: Kompleksitet betyder virkelig noget! Overvej hvad i sætter maskinen igang med at lave!

Klassifikation af algoritmer efter design metode Del og hersk Nedbrydning af problem til mindre problemer der er lettere at løse Dynamisk programming Genanvendelse af tidligere opnåede resultater Ligner Del-og-hersk men er typisk hurtigere i udførsel pga. genanvendelse af resultater Lineær programming Løsning af lineære uligheder, eks. Ax<b Grådige algoritmer Valg af umiddelbart mest optimal løsning til et givet delproblem Giver ikke nødvendigvis bedste resultat, men typisk et ret godt resultat Reduktion Inkludere problem transformering til et kendt og mindre kompleks løsning Søg og nummerering Til problemer der kan løses som grafer, f.eks. Skak eller kryds og bolle Probabilistiske and heuristiske algoritmer Algoritmer der er baseret på tilfældigheder, f.eks. genetiske algoritmer

Klassifikation af algoritmer efter implementationsmetode Rekursion eller iteration Algoritmer der baserer sig på gentagne kald af sig selv Typisk del-og-hersk type algoritme Logiske Anvendelse af logiske aksiomer der leder til kontrollerede, logiske udledninger baseret på input Serielle, parallelle eller distribuerede Serielle algoritmer kræver instruktioner udført en ad gangen Parallelle algoritmer kan dele sine opgaver op i mindre delopgaver (f.eks. del-og-hersk) Distribuerede algoritmer, arbejder ikke bare på en enkelt maskine, men over et helt netværk Deterministiske eller non-deterministiske Deterministiske algoritmer baserer sine beslutninger på et deterministik grundlag Non-deterministiske algoritmer baserer ikke altid sine beslutninger på et deterministisk grundlag, f.eks. probabilistiske algoritmer Præcise eller upræcise Nogen algoritmer (præcise) leverer et eksakt resultat, mens andre algoritmer leverer et næsten, eller ret godt resultat.

Fra problem til algoritme hvad kræves der? Hvad er problemet? Hvordan beskriver vi en løsning, der utvetydigt kan forstås af alle? Samling af Ikea møbler Olie kontrol på bilen Madlavning Sortering af og søgning i millioner af data elementer En computer er ikke indforstået med ret mange ting! Den er DUM! Nogle vigtige krav til algoritmer Korrekthed (skal kunne løse problemet tilfredsstillende præcist) Effektivitet (skal kunne løse problemet indenfor given tids/ressource rammer) Let forståelige og vedligeholdelsesvenlig (andre skal også kunne forstå algoritmen og evt. lave opdateringer) Genbrugelighed og generalitet (må gerne kunne genbruges i andre sammenhæng) Nogle gange er det et trade-off mellem køretid og udviklingstid.

Dagsorden Introduktion og formål med kursus Introduktion til algoritmer Eksempler Fra problem til algoritme Analyse af algoritmers korrekthed Metode Eksempler Insert sorterings algoritme Merge algoritme Metoder til analyse af algoritmer Notationer Kompleksitet Opsummering og konklusion Opgaver

Loop invarianter I familie med matematisk induktion Beskriver egenskaber for variable, og skal leve op til tre egenskaber Initialisering: Skal være sand før første iteration i et loop Vedligheholdelse: Hvis den er sand før loopet, er den også sand efter Slutning: Når loopet afsluttes, skal invarianten have et brugbart egenskab der hjælper med at afgøre hvornår algoritmen sluttes

Insertion sort algoritme Et problem simpelt nok til at starte med

Insertion sort algoritmen grafisk representation 5 2 4 6 1 3 2 5 4 6 1 3 2 4 5 6 1 3 2 4 5 6 1 3 1 2 4 5 6 3 1 2 3 4 5 6

Insertion sort algoritmen pseudo kode - reminder Insertion - sort(a) 1 for j=2 to length(a) 2 do key=a[j] 3 insert A[j] into sorted sequence A[1..j-1] 4 i=j-1 5 while i>0 and A[i]>key 6 do A[i+1]=A[i] 7 i=i-1 8 A[i+1]=key Loop Invariant: I starten af for loopet, indeholder A[1..j-1] de originale elementer i A[1..j-1] men i ordnet rækkefølge!

Bevis for loop invariant i insert-sort algoritmen 1. Initialisering: Første iteration, j=2 -> A[1..j-1] kun indeholder A[1] Denne er sorteret og dermed holder punkt 1 i loop invariant kravet 2. Vedligeholdelse: For hvert j, skal A[1..j-1] være ordnet ved start af loop, og A[i..j-1] skal være ordnet ved slut af loop (ikke nødvendigvis samme orden, men stadig i en orden) Det kræver at den indre while loop overholder samme invarians, hvormed samme type analyse bør udføres for dette loop 3. Slutning: Hvad sker der når det ydre loop når j>n? Sæt j=n+1, og indsæt i array A[1..n+1-1] = A[1..n] (hele det originale array) Pga. 2. med j=n+1 er vi sikker på at arrayet er sorteret ved slutning! Konklusion: Algoritmen virker efter hensigten

Merge algoritmen - antagelser og parametre Formål med algoritmen er Umiddelbart: At samle et delvist sorteret array A På længere sigt: At fungere i en rekursiv sorteringsalgoritme Parametrene p, q og r angiver steder i et array A[1..N], hvormed algoritmen skal arbejde p: startangivelse q: midterpunkt r: stopangivelse Algoritmen antager at arrayet A er delvist sorteret A[p.. q] er sorteret A[q+1.. r] er sorteret

Merge algoritmen grafisk representation

Merge algoritmen grafisk representation p q r 2 4 5 7 1 2 3 6 L 2 4 5 7 1 2 3 6 R 1 4 5 7 1 2 3 6 8 8 1 2 5 7 1 2 3 6 L 2 4 5 7 8 1 2 3 6 8 R L 2 4 5 7 8 1 2 3 6 8 R 1 2 2 7 1 2 3 6 L 2 4 5 7 8 1 2 3 6 8 R

Loop invariant for merge algoritme Nu definerer vi loop invarianten som I starten af loopet ved linje 10, indeholder delarrayet A[p..k-1] k-p mindste elementer af L[1..n1+1] og R[1..n2+1] i ordnet rækkefølge. Derudover, er L[i] og R[j] de mindste elementer i de respektive arrays der endnu ikke er kopieret over i A[]. Så skal vi igen til at vise 1. Loop invarianten holder før den første iteration 2. Hver iteration holder invarianten 3. Invarianten leder til et brugbart egenskab der afgører algoritmens afslutning

Dagsorden Introduktion og formål med kursus Introduktion til algoritmer Eksempler Fra problem til algoritme Analyse af algoritmers korrekthed Metode Eksempler Insert sorterings algoritme Merge algoritme Metoder til analyse af algoritmer Notationer Kompleksitet Opsummering og konklusion Opgaver

Vurderinger af algoritme kompleksitet Ultimate goal: Determining calculation time for the algorithms design (well, that is if we don t look at usage of other ressources such as memory, network, other kinds of I/O). Challenge: Even in this case the calculation time depends on factors such as hardware, OS, set of instructions and inputs for the algorithm. In any case we would like to make an estimate of runtimes. Usual method: Analyse the worst-case complexity using Big-O notation (asymptotic notation). This is often fine, but be aware that in some situations best-case or averagecase analysis may be more informative.

Vurderinger af algoritme kompleksitet Tre forskellige vurderinger af algoritmer Værste tilfælde Det kan i hvert fald ikke blive værre en det Sker for nogle algoritmer ofte, f.eks. Søgealgoritmer i databaser når data ikke findes Bedste tilfælde Det kan ikke blive bedre end det her Gennemsnitlig tilfælde Et billede af typiske tilfælde Minder ofte om værste tilfælde mere end bedste tilfælde

Den store O notation (the big-o) O(g(n)): angiver en asymptotisk øvre grænse for kompleksiteten Ω(g(n)): angiver en asymptotisk nedre grænse for kompleksiteten Θ(g(n)): indikere en øvre og nedre grænse, hvor g(n) er den asymptotiske tætte grænse

Udspecificerede notation og definition Θ(g(n)) = { f(n): there exist positive constants c 1, c 2 and n 0 such that 0 c 1 g(n) f(n) c 2 g(n) for all n n 0 } Eksempler på tavlen O(g(n)) = {f(n): there exist positive constants c and n 0, such that 0 f(n) cg(n) for all n n 0 } Hvis en funktion tilhører Θ(g(n)), så tilhører den også automatisk O(g(n)) I meget andet litteratur benyttes O(g(n)) om hvad bogen/vi opfatter som Θ(g(n)) Ω(g(n)) = {f(n): there exist positive constants c and n 0 such that 0 cg(n) f(n) for all n n 0 } For at en funktion f(n) skal tilhøre Θ(g(n)), skal den også tilhøre O(g(n)) OG Ω(g(n))!!

Insertion sort algoritmen pseudo kode Den tager vi lige manuelt på tavlen...

Udførselstid T(n)= Σalle bidrag fra hvert led Insert-sort på tavlen I bedste tilfælde ved en allerede sorteret struktur T(n)=an+b I værste tilfælde hvis strukturen er omvendt sorteret T(n)=an 2 +bn+c Men hvad kan vi bruge det til? Vi har jo ikke altid bedst eller værst tilfælde Hvad med merge sort?

Algoritme kompleksitet sammenligning. To sorterings algoritmer insertion og merge-sort bruger forskellig tid til at løse samme opgave: Insertion bruger c 1 n 2 til at sortere n elementer Merge-sort bruger c 2 *n*log(n) til at sortere n elementer Computer A er hurtig: 1 mia. instruktioner per sekund Computer B er langsommere: 10 mio. instruktioner per sekund Med c 1 =2 og c 2 =50 bruger Computer A: 2000 sekunder Computer B: 100 sekunder Og det til trods at konstanterne c 1 og c 2 favoriserer den hurtige computer!

Algoritme kompleksitet grafisk sammenligning Insertion Merge-sort

Konklusion og opsummering Først og fremmest svare på spørgsmålet: Virker min algoritme efter hensigten? Programmøren: Ja, den virker da, jeg har prøvet 20 tilfældige test data Dig: Se her er min loop invariant og her er beviset på papir Det kan betale sig at analysere sin algoritme, eventuelt sammenligne med andre der løser samme opgaver: versus Vi kan godt løse problemet med Algoritme A, men det tager.. År Hmmm. Du ved godt Algoritme B tager. Sekunder?

Divide and Conquer: Multiplication of integers

Problem: How to multiply two integers X and Y, each of n bits? Solution 1: School method O(n 2 ) Solution 2: Divide-and-conquer algorithm (Yes, that is true). Divide the problem into two subproblems of size n/2: X=AB, X=A2 n/2 +B Y=CD, Y=C2 n/2 +D We can now write: XY=AC2 n + (AD+BC)2 n/2 + BD Calculating this way, we have to perform: 4 multiplications (of n/2 bit integers) 3 additions of integers (at most 2n bits) 2 shifts In total T(1) = 1, T(n)=4T(n/2)+cn. Verify that this is O(n 2 ) Question: Can we do this smarter??

We had: XY =AC2 n + (AD+BC)2 n/2 + BD =AC2 n +((A-B)(D-C)+AC+BD)2 n/2 +BD Calculating this way, we have to perform: 3 multiplications (of n/2 bit integers) 6 additions of integers (at most 2n bits) 2 shifts In total T(1) = 1, T(n)=3T(n/2)+cn. Verify that this is 3T(n/2) + cn So, that was smart!

More examples: Greedy Algorithms Giving back change Greedy Algorithm Travelling Salesman Dynamic Programming World Series Odds